1

私は WCF Web サービスを初めて使用し、Web サービスをデバッグする方法をあまり知りません...

例に従って、次のようなインターフェイスを持つ Web サービスを作成しました。

public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    List<MyClass> GetData(string param);
}

MyClassのリストを返す実装。

展開後、Fiddler のようにサービスを呼び出しました

http://localhost/MyService.svc/GetData?keyword=blabla

戻り値:

HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/7.5
SPRequestGuid: blabla
WWW-Authenticate: blabla
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.6114
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Date: Mon, 12 Nov 2012 17:24:08 GMT
Content-Length: 0

そして、作曲家に書くだけなら:

http://localhost/MyService.svc/GetData

パラメータがない場合、ステータス 200 の空の json が返されます。

Chrome で最初のリクエストを試行すると、サーバーに対してユーザー名とパスワードが連続して要求されましたが、それらを入力しても (要求されたユーザー名とパスワードの) ループから抜け出すのに役立ちませんでした。

誰もこのような問題に遭遇しましたか? または、デバッグに関する提案をいただけますか?

4

1 に答える 1

0

WCFサービスは通常、箱から出してGETアクセスを許可しません。私自身の答え(ここ:https ://stackoverflow.com/a/13229373/1014822 )を飾り立てるには、次のようなWeb.configの構成セクションが必要です。

<bindings>
  <webHttpBinding>
    <binding name="crossDomain" crossDomainScriptAccessEnabled="true" />
  </webHttpBinding>
</bindings>
<behaviors>
  <endpointBehavior>
    <behavior name="restBehavior">
      <webHttp />
    </behavior>
  </endpointBehavior>
  <serviceBehavior>         
     <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true"  />
        <serviceDebug includeExceptionDetailInFaults="true"/>
     </behavior>
  </serviceBehavior>
</behaviors>
<services>
  <service name="..." behaviorConfiguration="MyServiceBehavior">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="crossDomain" 
              contract="..." behaviorConfigurations="restBehavior" /> 
  </service>
</services>

クロスドメイン要素は必要ないかもしれませんが、少なくとも、許可するエンドポイントの動作とを許可<webHttp />するサービスの動作が必要になります<serviceMetadata httpGetEnabled="true" />。その場合、構成のないサービスを利用することはできません<service/>。これらの動作をバインドできるようにするには、要素が必要です。<service/>サービスの名前とコントラクトのインターフェース名を使用して要素を完成させる必要があります(例IMyService

GETを介してテストする方が簡単で、実際のアプリでPOST(またはhttp以外のプロトコル)を使用する場合は、ブラウザーやフィドラーの代わりにWCFテストクライアントを使用することを検討してください。 。ここでのクライアントの詳細:http://msdn.microsoft.com/en-us/library/bb552364.aspx

于 2012-11-12T17:58:17.910 に答える