web-dev-qa-db-ja.com

POSTMANからWCFサービスメソッドを呼び出す方法

WCFエンドポイントを使用してサービスを呼び出そうとしています。 WCFサービスはWindowsサービスでホストされています。

これが設定です。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.diagnostics>  
    <sources>
      <source name="System.ServiceModel" propagateActivity="true" switchValue="All">
        <listeners>
          <add name="xmlTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="All">
        <listeners>
          <add name="xmlTraceListener" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xmlTraceListener"
           type="System.Diagnostics.XmlWriterTraceListener"
           initializeData="C:\logwcf\Service.svclog" />
    </sharedListeners>
  </system.diagnostics>
  <system.web>
    <httpRuntime executionTimeout="90" />
  </system.web>
  <startup useLegacyV2RuntimeActivationPolicy="True">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <system.serviceModel>
  <diagnostics>
        <messageLogging logEntireMessage="true" 
                        logMalformedMessages="true" 
                        logMessagesAtServiceLevel="true" 
                        logMessagesAtTransportLevel="true">
          <filters>
            <clear/>
          </filters>
        </messageLogging>
      </diagnostics>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_Hostware" closeTimeout="00:10:30" openTimeout="00:10:30" receiveTimeout="00:10:30" sendTimeout="00:10:30" allowCookies="false" bypassProxyOnLocal="false" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true" messageEncoding="Text">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="xx.ServicioDistribucion.AnalisisDatos.Servicios.CuentasCobrar" behaviorConfiguration="behaviorDistribucion">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Hostware" contract="xx.ServicioDistribucion.AnalisisDatos.Interfaces.ICuentasCobrar">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <Host>
          <baseAddresses>
            <add baseAddress="http://xx.143.46.82:8733/xx.ServicioDistribucion.AnalisisDatos.Servicios.CuentasCobrar/"/>
          </baseAddresses>
        </Host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorDistribucion">
          <serviceThrottling maxConcurrentSessions="10000"/>
          <!-- 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="true"/>
<!--<dataContractSerializer maxItemsInObjectGraph="2147483646"/>-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https"/>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
</configuration>

そして、POSTMANを使用して次のようにサービスを呼び出そうとしています。

これは生の体です:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:ProcesarListaCuentasCobrarCIA100/>
   </soapenv:Body>
</soapenv:Envelope>

しかし、私たちはこの応答を得ています

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <s:Fault>
            <faultcode xmlns:a="http://schemas.Microsoft.com/ws/2005/05/addressing/none">a:DestinationUnreachable</faultcode>
            <faultstring xml:lang="es-CO">The message with To 'http://xx.143.46.82:8733/xxServicioDistribucion.AnalisisDatos.Servicios.CuentasCobrar/ProcesarListaCuentasCobrarCIA100/' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher.  Check that the sender and receiver's EndpointAddresses agree.</faultstring>
        </s:Fault>
    </s:Body>
</s:Envelope>

コンテンツタイプヒーラーはtext/xmlです。

そして私たちはPOSTを使おうとしています

5
Luis Valencia

IIRCでWCFサーバーにSOAP呼び出しを行う場合、本文のコンテンツに加えて設定する必要のあるHTTPヘッダーがあります。

私の古いSOAP呼び出しには、次の形式のヘッダーがあります。

SOAPAction: http://domain/EndPoint

これを確認する必要があるかもしれません。動作しているクライアントがある場合は、Fiddlerでトラフィックをキャプチャします。また、content-typeを "text/xml; charset = utf-8"に設定していて、POSTのコンテンツタイプに気を使っているサーバーがあることを思い出しているようです。

4
Walter

PostmanでWCF呼び出しを機能させる最も簡単な方法は次のとおりです...

1.)Fiddlerを開き、WCFプロジェクトをローカルでデバッグすると、Visual StudioWCFテストクライアントが開きます。

2.)WCFテストクライアントで、サービスメソッドの呼び出しを呼び出して応答を取得します。

3.)Fiddlerでリクエストをクリックします。

4.)フィドラーの[RAW]タブをクリックしてリクエストを表示し、リクエストヘッダーのエンベロープタグをコピーします。

次のようになります

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><YourMethodName xmlns="http://yourserver.com/serviceName/v1.0"/></s:Body></s:Envelope>

5.)Postmanで新しいリクエストを作成し、[BODY]タブを開いて、[raw]ラジオボタンを選択します。

6.)コンテンツタイプのドロップダウンを「XML」に設定します。

7.)封筒タグを上からPostmanのBODYフィールドに貼り付けます。

8.)PostmanのURLを、Fiddlerで行われているリクエストに設定します。これは、Fiddlerのリクエストの最初の行になります。 http://server/yourservice.svc

9.)PostmanのリクエストタイプをPOSTに変更します

10.)Postmanの[HEADERS]タブに切り替え、値が「text/html」のCONTENT-TYPEヘッダーを追加します。

11.)Fiddlerリクエストで、SOAPActionヘッダーが表示されます。このヘッダーのURLをコピーしてください

12.)Postmanの[HEADERS]タブで、「SOAPAction」ヘッダーを追加し、URLヘッダーをこの値に貼り付けます。

13.)サービスを実行してください!

ボーナス

PostmanからリモートWCFサービス(ローカルで実行できない)を呼び出す場合は、ローカルプロジェクトをデバッグして、WCFテストクライアントを開きます。

1.)WCFテストクライアントの[マイサービスプロジェクト]ツリーノードを右クリックし、[サービスの追加]をクリックします。

2.)サービスのURLを入力します

3.)ローカルサービスを実行する場合と同じようにメソッドを呼び出し、Fiddlerで追跡し、上記の手順に従ってPostmanに追加します。

1
Greg Quinn
  1. WCFを実行します。例 https://docs.Microsoft.com/en-us/dotnet/framework/wcf/getting-started-tutorialenter image description here

  2. Wsdlを開き、アクションを見つけます enter image description here

  3. また、WCFテストクライアントでアクションを見つけることができます enter image description hereenter image description here
  4. PostManURL内-wsdlから- http:// localhost:8000/GettingStarted/CalculatorService /

ヘッダー-

コンテンツタイプ:text/xml

SOAPAction: http://Microsoft.ServiceModel.Samples/ICalculator/Addenter image description here 4.WCFテストクライアントから本文を追加します。私にとって体は

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
  <s:Body>
    <Add xmlns="http://Microsoft.ServiceModel.Samples">
      <n1>1</n1>
      <n2>1</n2>
    </Add>
  </s:Body>
</s:Envelope>

ドロップダウンで選択した--xml enter image description here 送信 enter image description here

0