1

基本的に、このチュートリアルhereに従いました

ローカルマシンからすべてを稼働させ、正常に動作させます。IIS に展開し、必要なファイアウォール ポートを許可したので、別のドメインにあるクライアント PC に移動します。

このマシンで WCF テスト クライアントを起動し、WSDL の URL を入力すると、問題なくサービス コールを表示できました。唯一のことは、実際にメソッドを使用して値を送信しようとすると、次の応答が返されることです

「発信者はサービスによって認証されませんでした」

奇妙なことに、ローカルではまだ動作しますが、別のマシンでは動作しません。何をしているかに基づいてクライアントを構成する特定の方法はありますか??

ここに私のweb.configがあります

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WCF33.Service1">
        <endpoint address ="" binding="wsHttpBinding" contract="WCF33.IService1" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/WCF33/Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false 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>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

私が従ったチュートリアルでは、メッセージヘッダーにキーを渡し、それに基づいて認証しますが、それは問題ではありません。wshttpバインディングと関係があると思いますが、このタイプの暗号化が必要です。

これを解決する方法について誰か情報/アドバイスをください:)

4

2 に答える 2

0

私が従ったチュートリアルでは、メッセージヘッダーにキーを渡し、それに基づいて認証しますが、それは問題ではありません。

通話でキーを渡していますか? 実行しているコードが認証ヘッダーに何かを期待していて、そこにない場合、そのエラーが返される可能性があります。

于 2013-01-16T17:45:45.157 に答える
0

これで2つの主な問題がありました.この質問は実際に私の最初のハードルになりました.

wshttpbinding では、プログラムでクライアントを構成し、wshttpbinding を作成してサービスのインスタンスにアタッチする必要がありました。Windows資格情報も渡す必要がありました。これを行うと、発信者が認証されたというメッセージが消えました。

エラーの次の段階は、予期された応答が SOAP 1.2 フォーマットと一致しない application/xml エラーでした。何らかの理由でバインド サーバー側が wshttp であるにもかかわらず、展開時に basichttp にデフォルト設定されていたため、これは奇妙なものでした。これを回避するために、プロトコルをバインドにマップできる wcf 構成エディターのマッピング セクションがあります。ここで、http は basichttp に設定されています。これを wshttp に変更するだけで、準備完了です :)

これらの2つのエラーはどこにでもあるようで、答えがまったくないため、これが誰かに役立つことを願っています!!

于 2013-01-18T09:51:09.573 に答える