WCF REST与Windows Phone的通信

WCF REST与Windows Phone的通信,wcf,windows-phone-7,rest,azure,Wcf,Windows Phone 7,Rest,Azure,我的Windows Phone应用程序通过RestSharp向我自己创建的WCF服务发送rest请求时遇到一些问题。请求在emulator中工作正常,请求返回结果,但当我尝试在实际设备上的应用程序上执行请求时,请求失败,请求不返回任何内容 经过大量研究,我发现Windows Phone显然不支持webHttpBinding,因此我需要在我的Web.config文件中添加basicHttpBinding端点。然而,当我尝试这样做时,我会遇到一些与拥有多个端点相关的错误,我似乎无法找到任何解决方案来

我的Windows Phone应用程序通过RestSharp向我自己创建的WCF服务发送rest请求时遇到一些问题。请求在emulator中工作正常,请求返回结果,但当我尝试在实际设备上的应用程序上执行请求时,请求失败,请求不返回任何内容

经过大量研究,我发现Windows Phone显然不支持webHttpBinding,因此我需要在我的Web.config文件中添加basicHttpBinding端点。然而,当我尝试这样做时,我会遇到一些与拥有多个端点相关的错误,我似乎无法找到任何解决方案来成功地处理这两个端点。当我导航到localhost:81/mywebservice.svc时,将端点切换到basicHttpBinding并注释掉webHttpBinding也会导致错误

   "System.InvalidOperationException: For request in operation analyseFace to be a stream the operation must have a single parameter whose type is Stream." 
请求应附加请求的流。它显示了一个使用原始代码和相同地址的正常帮助页面

我的web.config文件

     <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
        <behavior name="servicebehavior">
          <!--<serviceMetadata httpGetEnabled="true"/>-->
          <serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="restbehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="servicebehavior" name="VizageAPIWebRole.vizage">
          <endpoint address="" behaviorConfiguration="restbehavior" binding="webHttpBinding" name="RESTEndPoint" contract="VizageAPIWebRole.Ivizage" />
          <!--<endpoint address="" binding="basicHttpBinding" contract="VizageAPIWebRole.Ivizage" />-->
        </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <bindings>
      <webHttpBinding>
        <binding name="RestBinding">
          <readerQuotas maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" />
          <security mode="None">
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

我想知道是否有人能帮我弄清楚我必须在web.config中编辑哪些代码才能使这两个端点都能工作,因为到目前为止我还没有从异常和您的配置中尝试过任何东西,您使用的是简化配置,默认情况下使用basicHttpBinding。您必须明确定义服务端点

 <services>
      <service  name="WcfRest.Ivizage">
        <endpoint behaviorConfiguration="restbehavior" binding="webHttpBinding"
         contract="WcfRest.Ivizage" />
      </service>
 </services>


编辑:看起来webHttp不是异常和您的配置中的

——您使用的是简化配置,默认情况下使用basicHttpBinding。您必须明确定义服务端点

 <services>
      <service  name="WcfRest.Ivizage">
        <endpoint behaviorConfiguration="restbehavior" binding="webHttpBinding"
         contract="WcfRest.Ivizage" />
      </service>
 </services>


编辑:看起来webHttp不是

您的代码似乎是REST服务,但basicHttpBinding支持SOAP。所以请继续使用webHttpBinding。但是,在Windows Phone端,不能使用WCF,需要使用WebClient或HttpWebRequest来访问REST服务。WCF可以帮助我们访问SOAP服务

此外,您提到应用程序在emulator中运行良好,因此不太可能出现编码问题。如果你能检查一下你的手机设备是否能上网,那就更好了。请确保您使用的是云服务的地址,而不是127.0.0.1。本地地址在实际设备上不起作用

致以最良好的祝愿


徐明。

您的代码似乎是REST服务,但basicHttpBinding支持SOAP。所以请继续使用webHttpBinding。但是,在Windows Phone端,不能使用WCF,需要使用WebClient或HttpWebRequest来访问REST服务。WCF可以帮助我们访问SOAP服务

此外,您提到应用程序在emulator中运行良好,因此不太可能出现编码问题。如果你能检查一下你的手机设备是否能上网,那就更好了。请确保您使用的是云服务的地址,而不是127.0.0.1。本地地址在实际设备上不起作用

致以最良好的祝愿


徐明。

您从哪里了解到WP7不支持webHttpBinding?我假设它支持basicHttpBinding和webHttpBinding。(参考:专业Windows Phone应用程序开发书)这家伙在这里说:这里:我现在正试图使用Windows Phone(WP7)的服务。但是,由于.NET Framework尚未完全赶上WP7,System.ServiceModel.Web命名空间不可用,导致webHttpBinding在WP7中无法工作。您在哪里读到WP7不支持webHttpBinding?我假设它支持basicHttpBinding和webHttpBinding。(参考:专业Windows Phone应用程序开发书)这家伙在这里说:这里:我现在正试图使用Windows Phone(WP7)的服务。但是,由于.NET Framework尚未完全赶上WP7,System.ServiceModel.Web命名空间不可用,导致webHttpBinding在WP7中无法工作。我尝试过这一点,但是我得到了这个错误:Stale.ValueOptualExpExct:对于操作分析中的请求是一个流,操作必须有一个单独的参数,它的类型是流。”当试图访问VIZAG.SVC时,它应该是“这是一个Windows通信基础服务”页。将服务名称更改为.vizage而不是.Ivizage会显示服务页面,但当我尝试将webhttpbinding端点交换为基本端点时,前面提到的错误也会发生,我尝试过,但我遇到了此错误“Simult.ValuePosialExcExpExct:对于操作中的请求,分析流是一个流,操作必须有一个其类型是流的单个参数。”当试图访问VIZAG.SVC时,它应该是“这是一个Windows通信基础服务”。“第页。将服务名称更改为.vizage而不是.Ivizage会显示服务页面,但当我尝试将webhttpbinding端点交换为基本端点时,前面提到的错误也会发生