如何为通过basicHttpBinding托管并从Windows CE引用为Web服务的WCF服务设置客户端凭据?

时间:2014-05-15 16:28:00

标签: c# .net web-services wcf windows-ce

我在Visual Studio 2008中创建了一个Windows CE 5.0应用程序。此应用程序引用了一项服务,该服务是在Visual Studio 2010中创建并在IIS 6中托管的WCF服务。由于该服务是从Windows CE项目引用的,因此使用“添加Web引用”对话框引用旧版Web服务。

该服务配置为使用传输安全性,它需要Windows凭据:

<system.serviceModel>   
    <services>
      <service name="ServiceTests.TestService">
        <endpoint address="" binding="basicHttpBinding" contract="ServiceTests.ITestService" bindingConfiguration="basicConfig"></endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="basicConfig">
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="Windows"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>          
          <serviceMetadata httpGetEnabled="true"/>          
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

此服务很容易从普通的.net 4.0应用程序中使用,如下所示:

var client = new TestServiceClient();
client.ClientCredentials.UserName.UserName = "FBradley";
client.ClientCredentials.UserName.Password = "jgb.2013!";            
System.Console.WriteLine(client.GetData(1));
System.Console.ReadLine();

但是,从Windows CE项目中,ClientCredentials属性不可用,只有Credentials属性。我试图将NetworkCredential类型传递给它,但它失败了:

using (var client = new TestService())
{                           
      client.Credentials = new NetworkCredential("usename", "password", "domain");
      var response = client.GetData(1, true);
      MessageBox.Show(response);
}

我是否从服务配置文件中遗漏了Windows CE设备(显然不是域成员)需要进行身份验证的内容?如何配置此Windows CE(非域)设备或服务,以便客户端可以使用该服务?我错过了什么?

0 个答案:

没有答案
相关问题