从Metro应用程序中使用WCF数据服务

时间:2015-03-20 16:04:06

标签: c# .net wcf microsoft-metro

我正在使用TCP开发Metro应用程序和托管在Windows服务中的WCF数据服务。 Metro App将使用此WCF服务来使用数据。我让Windows服务主机运行,以便可以使用WCF服务 问题是运行Metro App以在我的开发框中测试此配置,我得到 System.ServiceModel.Security.SecurityNegotiationException 。内部异常是 System.Security.AuthenticationExceptio n:"对SSPI的调用失败,请参阅内部异常。"),这又有另外一个内部异常:System.ComponentModel .Win32Exception:"安全包中没有可用的凭据"。

我的测试环境:
服务合同:

[ServiceContract]
public interface IWCFDataService
{
    [OperationContract]
    Device GetDevice(string ip);
}

[DataContract]
public class Device
{
    [DataMember]
    public string Name { get; set; }
}

服务代码:

public class WCFDataService : IWCFDataService
{
   public Device GetDevice(string ip)
   {
       return new Device { Name = "Sample device" };
   }
}

WCF服务配置:

<system.serviceModel>
    <services>
      <service name="Apollo.DataService.WCFDataService">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
          contract="Apollo.DataService.IWCFDataService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8523/WCFDataService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

使用WCF数据服务的Metro应用程序:

var client = new DataService.WCFDataServiceClient();
var peripheral = await client.GetDevice("127.0.0.1"); <-- Throw Exception


更新:
如果我从Windows窗体应用程序中使用WCF服务,那么每件事都可以正常工作,那么Metro Application就会出现问题。

0 个答案:

没有答案