0

我在连接 WCF 服务和 Windows Phone 时遇到问题。我有一个没有源代码的服务(仅在网络上发布),我需要在 Windows Phone 7 应用程序中使用它。

我在项目中添加了一个服务引用,VS 生成了我的文件 ServiceReferences.ClientConfig:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="HttpBinding_IWcfMobilServices">
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://www.www.com/WcfMobilServices.svc"
          binding="basicHttpBinding" bindingConfiguration="HttpBinding_IWcfMobilServices"
          contract="MobileService.IWcfMobilServices" name="HttpBinding_IWcfMobilServices"></endpoint>
    </client>
  </system.serviceModel>
</configuration>

当我调用服务方法时:

public static void Login()
{
    var proxy = new MobileService.WcfMobilServicesClient();
    proxy.LoginAsync("loginName", "paswword");
    proxy.LoginCompleted += (s, a) =>
        {
                //some code
        };
}

LoginCompleted 中的应用程序在 a.Result 上抛出异常:

System.ServiceModel.ProtocolException:内容类型文本/xml;服务http://www.www.com/WcfMobilServices.svc不支持 charset=utf-8 。客户端和服务绑定可能不匹配。---> System.Net.WebException:远程服务器返回错误:NotFound。---> System.Net.WebException:远程服务器返回错误:NotFound。在 System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 在 System.Net.Browser.ClientHttpWebRequest.<>c_ DisplayClasse.b _d(Object sendState) 在 System.Net.Browser.AsyncHelper.<>c_ DisplayClass1.b_0(Object sendState) --- 内部异常堆栈跟踪的结束 --- 在 System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 在 System .ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) --- 内部异常堆栈跟踪结束 --- 在 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在 W7App.MobileService.LoginCompletedEventArgs.get_Result()} 系统.ServiceModel.CommunicationException {System.ServiceModel.ProtocolException}

知道有什么问题吗?

我试图将配置文件中的 Binding 更改为 wsHttpBinding,但 VS 向我显示了一个警告:

元素“绑定”具有无效的子元素“wsHttpBinding”。预期的可能元素列表:“basicHttpBinding,CustomBinding”。

谢谢

4

1 回答 1

2

继续我们的谈话。Silverlight/Windows Phone 7支持basicHttpBindingCustomBinding. 通过创建一个控制台应用程序,您可以使用wsHttpBinding. 因此,您的选择是:

  1. 要求basicHttpBinding添加到端点。
  2. 创建另一个位于 Windows Phone 和其他 WCF 服务之间的 WCF 服务。这样您就可以连接,basicHttpBinding然后中间 WCF 可以wsHttpBinding用来连接到其他服务。

显然,选项 2 会更慢,并且会增加任何更新的复杂性和麻烦,但除非选项 1 是可能的,否则我认为您没有很多其他选择。

于 2013-05-15T08:48:50.330 回答