0

WCFサービスを使用していて、「リモートサーバーからエラーが返されました:(400)不正な要求です」というエラーメッセージが表示されます。WebClient経由で消費する場合

public class WebClientService : WebClient
            ...
            base.Credentials = CredentialCache.DefaultCredentials;
            base.OpenReadCompleted += new OpenReadCompletedEventHandler(ReadJsonStringAsyncComplete);
            base.OpenReadAsync(new Uri("http://localhost/xxxx.svc/GetData"));
            ...

使用するWCFサービスは次のとおりです(両方が同じソリューション内に存在することに注意してください(異なるプロジェクト)

契約/インターフェース:-

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetData", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
IList<MyType> GetData();

実装:-

public IList<MyType> GetData()
{
    return (new MyTypeRepository()).All.ToList();
}

構成:-

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
  <service name="xxxx.Service.MyService" behaviorConfiguration="DataExtractBehavior">
    <endpoint address="http://localhost:1422/MyService.svc" binding="webHttpBinding" bindingConfiguration="DataExtractBinding" behaviorConfiguration="MyEndpointBehavior" contract="xxxx.Service.Common.IMyService"></endpoint>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="MyEndpointBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="Default">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" />
      <serviceCredentials>
        <windowsAuthentication allowAnonymousLogons="false" includeWindowsGroups="true" />
      </serviceCredentials>
    </behavior>
    <behavior name="DataExtractBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <etwTracking profileName="EndToEndMonitoring Tracking Profile" />
    </behavior>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
      <etwTracking profileName="EndToEndMonitoring Tracking Profile" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <webHttpBinding>
    <binding name="DataExtractBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows"></transport>
      </security>
    </binding>
  </webHttpBinding>
</bindings>

経由でサービス定義ページを表示できますが、メソッドGetData(URIの最後に追加されます- )http://localhost:1422/xxxx.svcを呼び出すことができないようです。http://localhost:1422/xxxx.svc/GetData

なぜ私がHTTP400を取得するのか誰かが知っていますか-悪いリクエスト

トラビスに感謝します

4

2 に答える 2

2

同じコードが私にとってはうまく機能しています。以下のように構成設定を変更します。

  <endpointBehaviors>
    <behavior name="MyEndpointBehavior">
        <webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" />
    </behavior>
  </endpointBehaviors>

そして、http://localhost:1422/xxxx.svc/helpGetData操作を使用してサービスを参照します。今http://localhost:1422/xxxx.svc/GetDataそれで試してみてください。

また、アプリケーションが別のポート(1422以外)で実行されている場合は、アプリケーション(プロジェクト)->プロパティ-> Web->特定のポート(1422と入力)に移動して、これを試してください。ブラウズ。

お役に立てれば。

于 2012-10-26T02:19:15.167 に答える
0

問題は完全に私のせいでした-私は「Get」リクエストとして契約されている上記のサービスに「Post」リクエストを行っていました

于 2012-11-16T11:23:57.793 に答える