WindowsPhoneアプリからRestSharpを介して作成したセルフホストのWCFサービスに送信されるRESTリクエストに関して問題が発生しています。リクエストはエミュレーターで正常に機能し、リクエストは結果を返しますが、実際のデバイスのアプリでリクエストを実行しようとすると失敗し、リクエストは何も返しません。
かなりの量の調査を行った結果、明らかにwebHttpBindingがWindows Phoneでサポートされていないことがわかりました。そのため、basicHttpBindingエンドポイントをWeb.configファイルに追加する必要があります。ただし、これを実行しようとすると、複数のエンドポイントがあることに関連するいくつかのエラーが発生し、これらの両方を正常に機能させるための解決策が得られないようです。エンドポイントをbasicHttpBindingに切り替え、webHttpBindingをコメントアウトすると、localhost:81/mywebservice.svcに移動したときにエラーが発生します。
"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>
私のWCFサービス
[ServiceContract]
public interface Ivizage
{
[WebInvoke(UriTemplate = "/agerecog/{auth}", Method = "POST")]
VizageResult analyseFace(string auth, Stream dataStream);
}
私が試したことでこれまで運がなかったので、誰かが私のweb.configで編集しなければならないコードを理解して、両方のエンドポイントでこれを機能させることができるかどうか疑問に思っています