2

初めての WCF サービスを構築しようとしています。私は今、次の動作をしています。

  1. WCF サービスを実行すると、入力を送信して、Testing Client で適切な結果を得ることができます。
  2. http://localhost:12345/Service1.svcChromeに入力すると、ページが表示されます。
  3. をクリックするとsvcutil.exe http://localhost:12345/Service1.svc?wsdl、XML が表示されます。

ただし、http://localhost:12345/Service1.svc/test/13と入力すると、空の応答しか返されません。そこには何もありませんが<body><pre>. 何が間違っている可能性があり、どうすれば解決できますか? (私は初心者なので覚えておいてください。) 思いどおりに動作するようになったら (ブラウザーで正しい結果を確認できるように)、REST または JSON データを XML で生成します。フォーマット(それが重要な場合)。

この議論から、私はこれを得ました。

namespace WcfService1
{
  [ServiceContract]
  public interface IService1
  {
    [OperationContract]
    [WebGet(UriTemplate = "/test/{indata}", 
      ResponseFormat = WebMessageFormat.Xml)]
    String Ping(String indata);
  }
}

この質問でわかるように、私の実装は次のとおりです。

namespace WcfService1
{
  public class Service1 : IService1
  {
    public string Ping(String indata)
    {
      return "Pong " + indata;
    }
  }
}

提案されたweb.configは機能しなかったため、この記事のポインターをこのディスカッションと組み合わせて使用​​して、メタデータ (それが何であれ) を公開しようとしました。私の構成ファイルは、後者のリンクのものとほとんど同じです (診断部分を削除したことを除いて)。

4

3 に答える 3

1

WCF テスト クライアントは SOAP 上で動作すると思います。それは、あなたが手に入れたいものを提供しているというよりも、あなたが何かを提供しているという事実をテストします.

あなたが得ている空の体は、私の経験によれば、エラーメッセージに他なりません。ただし、クロスドメイン呼び出し (それが正しい名前であるか、考えられる問題の完全なリストであるかどうかは不明) などの特定の状況では、JavaScript でXDomainRequestオブジェクト (通常のXmlHttpRequestとは対照的に) を操作すると、応答が返されます。空であることは、エラー メッセージの結果です。

ステータスコードを確認しようとしましたか?それは200 OKですか、それとも(はるかに)大きいですか?

あなたがソーシャル MSDN で同様の質問をしたと思いますが、コードの作成方法について混乱がありました。以下にハイライトをまとめます。

Web.config

<configuration>

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

  <system.serviceModel>
    <services>
      ...
    </services>
    <behaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

services - サービスの性質を説明するタグの内容

<service name="DemoRest.RestService" 
         behaviorConfiguration="ServiceBehavior">
  <endpoint address="" binding="webHttpBinding" 
            contract="DemoRest.IRestService" 
            behaviorConfiguration="web"></endpoint>
</service>

behaviors - サービスとエンドポイントの動作を説明するタグの内容

<serviceBehaviors>
  <behavior name="ServiceBehavior">
    <serviceMetadata httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="true"/>
  </behavior>
</serviceBehaviors>

<endpointBehaviors>
  <behavior name="web">
    <webHttp/>
  </behavior>
</endpointBehaviors>

これで、次の URL を使用して応答を取得できます。

localhost/Service1.svc/inputData
于 2012-12-12T20:22:34.440 に答える
0

以下を試すことができます:

  1. ServiceBehaviour 属性でサービス実装をマークする

    [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
    public class Service1 : IService1
    
  2. 既存のデータを保持しながら、web.config 内で追加/変更します。

    <services>
      <service name="WcfService1.Service1">
        <endpoint binding="webHttpBinding" contract="WcfService1.IService1" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
     ...
    </behaviors>
    

これらの手順により、機能します。

于 2012-12-06T19:57:54.893 に答える
0

ドット ネット フレームワーク 4の簡易構成を使用して REST を機能させるには、web.config に次のものが含まれている必要があります。

<system.serviceModel>
  <!-- 1) Specify webHttp as an endpoint behavior -->
  <behaviors>
    <endpointBehaviors>
      <behavior >
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>

  <!-- 2) Setup a protocol mapping to allow the service to be accessed via webHttp-->
  <protocolMapping>
    <add scheme="http" binding="webHttpBinding"/>
  </protocolMapping>
</system.serviceModel>

ブラウザーですべての xml なしで出力を取得するには、次を追加します。

<!-- Configure the webHttp standard endpoint -->
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" />
  </webHttpEndpoint>
</standardEndpoints>

サービス メタデータ (プロキシを簡単に作成するために必要) へのアクセスを許可するには、これを behaviors 要素に追加します。

 <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
 </serviceBehaviors>

個人的には、次のようにエンドポイントを明示的に構成する古いスタイルの構成を好みます。

 <system.serviceModel>
  <services>
    <service name="WcfService1.Service1">
      <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1"  behaviorConfiguration="webHttpBehavior"/>
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp automaticFormatSelectionEnabled="true"/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
</system.serviceModel>

最後に、WCF サービス構成エディターを使用して、GUI を使用して構成を行うことができます。Visual Studio のツール メニューにあります。開いたら、プロジェクトの web.config を開き、編集を開始します。

于 2012-12-08T18:22:39.193 に答える