15

Ajax 呼び出し:

   $.ajax({
        type: "POST",
        url: "http://SomeService/ServiceName.svc/GetSearchResults",
        data: JSON.stringify({ parameters: serviceParameters }),
        contentType: "application/json; charset=utf-8",
        dataType: "XML",
        success: function (response) {
            $("#xmlText").text(response.xml);
        },
        error: function (msg) {
            alert(msg.toString);
        }
    })

WCF インターフェイス:

[OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Json,
                    UriTemplate = "GetSearchResults")]
        XElement GetSearchResults(inputParameters parameters);

        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "getFile")]
        Stream GetFile(DocInfo info);

Web.config:

 <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off"/>
  </system.web>

 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

 <system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
   </serviceHostingEnvironment>
   <standardEndpoints>
     <webHttpEndpoint>
       <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"></standardEndpoint>
     </webHttpEndpoint>
   </standardEndpoints>
 </system.serviceModel>

このサービスは IIS6 でホストされています。

サービスを呼び出すと、次のエラー メッセージが表示されます。

500 System.ServiceModel.ServiceActivationException

メソッドを呼び出してGetFile応答ストリームを取得できますが、呼び出し時にエラー メッセージが表示されますGetSearchResults

どんな助けでも大歓迎です。

4

3 に答える 3

8

刺激的な回答とコメントをありがとうございます。

私は実際に同じエラーに遭遇しましたが、話は異なります:

最初に、「404 (Not Found)」サーバー エラーが発生しました。これは、「HTTPS」のトランスポートがなく、「HTTP」のトランスポートが既にあるためです。

<httpsTransport>要素に aを追加した<binding>ので、次のようになりました。

<bindings>
  <customBinding>
    <binding name="CustomBinding_ITheService">
      <httpTransport keepAliveEnabled="True" transferMode="Streamed" authenticationScheme="None" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" manualAddressing="true" />
      <httpsTransport keepAliveEnabled="True" transferMode="Streamed" authenticationScheme="None" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" manualAddressing="true" />
    </binding>
  </customBinding>
</bindings>

その後、500 System.ServiceModel.ServiceActivationExceptionエラーが発生しました。ただし、「イベント ビューアー > Windows ログ > アプリケーション」をナビゲートしたところ、「同じバインドに対してトランスポートを複数回定義することはできません」ことがわかりました。そこで、「HTTPS」トランスポート用の新しいバインディングを持つ追加のエンドポイントを追加することにしました。

最後に、私の構成は次のようになります。

<services>
  <service name="TheService" behaviorConfiguration="WebHttpBehavior_ITheService">
    <endpoint binding="customBinding" bindingConfiguration="CustomBinding_ITheService" contract="ITheService" behaviorConfiguration="EndPointBehavior_ITheService" />
    <endpoint binding="customBinding" bindingConfiguration="CustomBinding_ITheService_Secured" contract="ITheService" behaviorConfiguration="EndPointBehavior_ITheService" />
  </service>
</services>

<bindings>
  <customBinding>
    <binding name="CustomBinding_ITheService">
      <httpTransport keepAliveEnabled="True" transferMode="Streamed" authenticationScheme="None" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" manualAddressing="true" />
    </binding>
    <binding name="CustomBinding_ITheService_Secured">
      <httpsTransport keepAliveEnabled="True" transferMode="Streamed" authenticationScheme="None" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" manualAddressing="true" />
    </binding>
  </customBinding>
</bindings>

その後、すべてが正しい方向に進み、完璧に機能します。

Visual Studio で開発し、IIS-Express " Cassini " を使用する場合は、Web サイト プロジェクトのプロパティで SSL オプションを有効にすることを忘れないでください。 .

于 2017-07-26T12:59:56.277 に答える