0

Azure で WCF をホストする際に発生した問題に対する答えを高低で検索しましたが、あきらめました。今この質問をしていますが、誰かが答えてくれることを願っています。

IIS7 で WCF を完全に動作させており、クライアント アプリケーションは既にスムーズに接続しています。すべてローカルで動作します。WCF 構成ファイルに次のバインド構成があります。

<system.serviceModel>
<standardEndpoints />
<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" allowCookies="true" maxBufferSize="2147483647"
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
  <webHttpBinding>
    <binding name="webHttp" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>
<services>
  <service name="SurveyWCFService.SurveyService">
    <clear />
    <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="basicHttp"
      bindingName="basicHttp" contract="SurveyWCFService.SurveyService" />
    <endpoint address="json" behaviorConfiguration="jsonBehavior"
      binding="webHttpBinding" bindingConfiguration="webHttp" contract="SurveyWCFService.SurveyService" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="jsonBehavior">
      <webHttp />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <!-- 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>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

ご覧のとおり、サービスに接続する C# アプリケーション用の SOAP エンドポイントと、REST を使用してアクセスするクライアント用の JSON という名前のエンドポイントの 2 つのエンドポイントがあります。これを「Azure Web ロール」テンプレートの既定の構成で Azure にデプロイしました。クライアントは、Azure が生成した特定の URL に既にアクセスできます。しかし、ここに奇妙なことがあります:

1) クライアントが特定のサービス メソッドを使用するたびに、次の例外が返されます。

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at
http://<hostedservicename>/SurveyService.svc that could accept the message. 
This is often caused by an incorrect address or SOAP action. 
See InnerException, if present, for more details. ---> 
System.Net.WebException: The remote name could not be resolved: '<hostedservicename>'

アプリが .cloudapp.net に接続していないことを意味するため、奇妙です。そこで、ブラウザを使用していくつかのサービス メソッドを呼び出してみました。Fiddler は、応答が「HTTP 400」であることを教えてくれます。また、エンドポイント アドレスの URL を参照した後、生成された client-config ファイルを再確認しましたが、アドレスは正しいです。

2) Azure は、私のエンドポイントとバインドを独自のものに置き換えることを決定しました。Fiddler を使用してチェックし、wsdl ファイルもチェックアウトしたときに、その結​​論に達しました。wsdl ファイルの下部は次のとおりです。

ローカル WSDL

<wsdl:service name="SurveyService"><wsdl:port name="basicHttp_SurveyService" 
binding="tns:basicHttp_SurveyService"><soap:address location="http://localhost
/SurveyServiceLibrary/SurveyService.svc/soap"/></wsdl:port></wsdl:service>

アズール WSDL

<wsdl:service name="SurveyService"><wsdl:port name="BasicHttpBinding_SurveyService" 
binding="tns:BasicHttpBinding_SurveyService"><soap:address location=
"http://<hostedservicename>.cloudapp.net/SurveyService.svc"/></wsdl:port>   
</wsdl:service>

ローカル環境でのように WCF を機能させるにはどうすればよいですか? WCF で行う必要がある構成はありますか? アズールで?

4

2 に答える 2

0

WCF サービスを呼び出すアプリケーションを確認することをお勧めします。完全な URL を使用していないという印象を受けました。次のようにclient/endpoint要素を探します。

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
      <system.serviceModel>
          ...
          <client>
              <endpoint address="http://<hostedservicename>.cloudapp.net/SurveyService.svc" ... />
          </client>
      </system.serviceModel>
  </configuration>

ああ、リモート名を解決できませんでしたというエラーは、DNS レプリケーションをまだ取得していないことを示している可能性もあります。このような場合に私がよく行うのは、DNS サーバーを手動で 8.8.8.8 (Google の DNS サーバー) に変更することです。ほとんどの場合、これは機能します (数分後に自動に戻すことができます)。

于 2012-07-31T10:17:30.523 に答える
0

同じ問題に遭遇した人のためにこれを残します:

サービス構成ファイルで指定した名前空間を確認しましたが、名前空間にタイプミスがありました。ばかげています:)

于 2012-08-01T08:58:38.980 に答える