このセクションでは、.NET WCF SOAP クライアントに関するよくある質問に回答します。

このセクションの内容:

バインディングとは何か

WCF のバインディングとは、Web サービス エンドポイントのトランスポート、セキュリティ、およびメッセージ エンコーディングを記述するものです。SOAP Client がエンドポイントと通信するためには、エンドポイントのバインディングがわかっていなければなりません。SOAP Client は WSDL ドキュメントまたは .NET WCF クライアント構成ファイルから自動的にバインディングを判断します。

.NET WCF クライアント構成ファイルを作成するには、どうすればよいのか

Microsoft Service Model Metadata Tool (svcutil.exe) は、サービスの WSDL ドキュメントの URL を指定すると、クライアント構成ファイルを生成します。Microsoft Service Configuration Editor を使用すると、グラフィカルなユーザー インターフェイスから WCF 構成ファイルを作成し、編集することができます。どちらのツールも Visual Studio に付属する Microsoft Windows SDK に含まれているほか、Microsoft の Web サイトからダウンロードできます。Web サービスの開発者からテスト対象の Web サービスのクライアント構成ファイルの提供を受けることが可能な場合もあるでしょう。

.NET WCF クライアント構成ファイルは使用する必要があるのか

必須ではありません。Web サービスの WSDL ドキュメントに適切にサービスが記述されていれば、クライアント構成ファイルを使用せずに、SOAP Client が WSDL に従うよう指定するだけで構いません。ただし、Web サービスが証明書ベースの認証を使用する場合は、.NET WCF クライアント構成ファイルをセットアップし、証明書がインストールされたローカル マシン上の場所を記述する必要があります。WCF バインディングは、受信メッセージの最大サイズなど、さまざまな制限も定義します。.NET クライアント構成ファイルを使用すると、そのような制限をコントロールすることができます。また、構成ファイルの情報よりも WSDL のバインディング情報が優先されるのを防ぐには、SOAP Client テストへの WSDL ドキュメントの制約を解除する必要があります。

証明書ベースの認証を構成するには、どうすればよいのか

まず、Windows Certificate Manager を使用してクライアント証明書およびサーバー証明書をインストールする必要があります。Windows Certificate Manger を開くには、[スタート] メニューの [Run...] をクリックして "certmgr.msc" と入力し、[OK] をクリックします。通常、サーバーの証明書は [信頼されたユーザー] ストアにインストールし、クライアント証明書は [個人] ストアにインストールします。次に、これらの証明書の場所をクライアント構成ファイルに指定します。 

MSDN の Web サイトには、この手順の詳細のほか、構成ファイルのサンプルが記載されています。

古い .NET web サービスを使用して .NET WCF SOAP クライアントをテストできるか

WSE 3.0 のサービスとネットワークレベルで互換性があるのは、WSE 3.0. .NET WCF クライアントだけです。次のカスタム バインディングを使用すると、Secure Conversation および MutualCertificate11 を使用する WSE 3.0 の Web サービスをテストできます。

 

<binding name="SecureConversationMutualCertificate11SignEncryptConfig">
    <security authenticationMode="SecureConversation" messageProtectionOrder=
         "SignBeforeEncrypt" requireSecurityContextCancellation="false">
         <secureConversationBootstrap authenticationMode="MutualCertificate"
               securityHeaderLayout="Strict" messageProtectionOrder="SignBeforeEncrypt"
               requireSignatureConfirmation="true" />
    </security>
    <textMessageEncoding messageVersion="Soap11WSAddressingAugust2004" />
    <httpTransport />
</binding>

 

MSDN の Web サイトにより詳細な情報が記載されています: http://msdn2.microsoft.com/en-us/library/ms730299.aspx 

.NET WCF SOAP クライアントを使用してGlassfish Metro/WSIT ベースのサービスをテストできるか

できます。Metro WSIT サービスは、SOAtest の SOAP Client ツールを含む .NET WCF クライアントと相互運用性があります。ただし、Metro には既知のバグがあり、空白および改行があると、リクエスト メッセージのセキュリティ検証が失敗します。この問題を回避するには、SOAP Client テストのリクエスト SOAP エンベロープ出力に Extension ツールを連結し、余分な空白を削除します。

 

from com.parasoft.api import * 
from java.lang import *
 
def removeAllNewLineCharacters(input, context):
    noNewLines = str(input).replace("\r", "").replace("\n", "")
    result = String(noNewLines).replaceAll(">\s*<", "><")
    Application.showMessage(result) # for debugging
    return result

よく見られるエラー

エラー メッセージ解決方法
Could not find endpoint in client configuration fileこのエラーは、SOAP Client テストが .NET WCF クライアント構成ファイルを使用しており、構成ファイルにテストのためのエンドポイントが記述されていない場合に発生します。クライアント構成ファイルにテストと同じエンドポイントが記述されていることを確認してください。エンドポイント URL (大文字/小文字が区別されます) に含まれる各文字の大文字/小文字が一致しているかをチェックしてください。テストが有効な .NET WCF クライアント構成ファイルを使用しているかどうかも確認してください。サービス構成ファイル (web.config) または WSE 構成ファイルが有効です。
Could not find endpoint in WSDLこのエラーは、SOAP Client テストが WSDLドキュメントの制約を受けるよう設定されており、WSDL にテストのためのエンドポイントが記述されていない場合に発生します。WSDL ドキュメントのエンドポイントと一致するよう、テストのエンドポイントを修正する必要がある可能性があります。WSDL ドキュメントのエンドポイントが不正な場合、WSDL を修正するべきです。WSDL のエンドポイントを修正できない場合、SOAP Client を誤った WSDL の制約から解放し、.NET WCF クライアント構成ファイルを使用するよう構成して、構成ファイルに正しいエンドポイントを記述します。
The X.509 certificate CN=localhost chain building failed.The certificate that was used has a trust chain that cannot be verified.Replace the certificate or change the certificateValidationMode.

エラー メッセージが示唆するとおり、クライアント構成ファイルに certificateValidationMode プロパティの設定が必要な可能性があります。多くの場合、Windows certificate manager を使用してサーバーの証明書を [信頼されたユーザー] ストアに追加し、構成ファイルの certificateValidationMode プロパティに PeerOrChainTrust を設定します。MSDN の Web サイトにサンプルが記載されています: http://msdn.microsoft.com/en-us/library/ms587504.aspx  および  http://msdn.microsoft.com/en-us/library/system.servicemodel.security.x509certificatevalidationmode.aspx

Identity check failed for outgoing message.The expected DNS identity of the remote endpoint was 'host1' but the remote endpoint provided DNS clam 'host2'.If this is a legitimate remote endpoint, you can fix the problem by explicitly specifying DNS identity 'host2' as the Identity property of EndpointAddress when creating channel proxy.

WSDL に記述されたエンドポイントの DNS 識別が誤っている可能性があります。エラー メッセージが示唆するとおり、クライアント構成ファイルで明示的に Identity プロパティを構成する必要がある可能性が高いでしょう。また、構成ファイルの情報よりも WSDL のバインディング情報が優先されるのを防ぐには、テストへの WSDL ドキュメントの制約を解除する必要があります。

クライアントでの Identity の指定については次を参照してください。http://msdn.microsoft.com/en-us/library/ms733130.aspx 

The maximum message size quota for incoming messages (65536) has been exceeded.To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element."

エラー メッセージが示唆するとおり、クライアント構成ファイルで MaxReceivedMessageSize プロパティを構成する必要があります。また、構成ファイルの情報よりも WSDL のバインディング情報が優先されるのを防ぐには、テストへの WSDL ドキュメントの制約を解除する必要があります。MSDN の Web サイトにサンプルが記載されています: http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpbinding.maxreceivedmessagesize.aspx

The maximum read depth (32) has been exceeded because XML data being read has more levels of nesting than is allowed by the quota.This quota may be increased by changing the MaxDepth property on the XmlDictionaryReaderQuotas object used when creating the XML reader.

エラー メッセージが示唆するとおり、クライアント構成ファイルで MaxDepth プロパティを構成する必要があります。また、構成ファイルの情報よりも WSDL のバインディング情報が優先されるのを防ぐには、テストへの WSDL ドキュメントの制約を解除する必要があります。MSDN の Web サイトにサンプルが記載されています: http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpbinding.readerquotas.aspx 

"Out of memory" errors when load testing .NET WCF SOAP Clients.Java のヒープのサイズを小さくし、.NET のランタイムがより多くのメモリを .NET のヒープに割り当てられるようにする必要がある可能性があります。
Unrecognized message versionこのエラーは、送信されるメッセージの SOAP および WS-Addressing のバージョンに関してレポートされます。  このエラーは、送信メッセージが有効な SOAP エンベロープではない場合に発生する可能性があります。  SOAP Client のリクエスト タブでリテラル XML またはフォーム XML ビューを使用している場合、XML に SOAP エンベロープが存在しているかを確認してください。
  • No labels