Webサービスを呼び出す前に、c#にカスタムのsoapヘッダー情報を追加しようとしています。私はこれを行うためにSOAPヘッダークラスを使用しています。これを必要な方法で部分的に行うことはできますが、完全に行うことはできません。SOAPヘッダーを次のように表示する必要があります。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<UsernameToken>
<Username>USERID</Username>
<Password>PASSWORD</Password>
</UsernameToken>
</Security>
</soap:Header>
<soap:Body>
...
以下のように石鹸ヘッダーを追加することができます
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<UsernameToken xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Username>UserID</Username>
<Password>Test</Password>
</UsernameToken>
</soap:Header>
<soap:Body>
私ができないことは、最初のサンプルのように「UsernameToken」をラップする「Security」要素を追加することです。どんな助けでもいただければ幸いです。
このリンク 石鹸ヘッダーを追加 私のために働いた。 SOAP 1.1サービスを呼び出していますが、これは作成しておらず、制御できません。VS2012を使用していて、プロジェクトのWeb参照としてサービスを追加しています。これがお役に立てば幸いです。
J. Dudgeonの投稿からスレッドの下部に向かって手順1〜5を実行しました。
ここにいくつかのサンプルコードがあります(これは別の.csファイルにあります):
_namespace SAME_NAMESPACE_AS_PROXY_CLASS
{
// This is needed since the web service must have the username and pwd passed in a custom SOAP header, apparently
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public Creds credHeader; // will hold the creds that are passed in the SOAP Header
}
[XmlRoot(Namespace = "http://cnn.com/xy")] // your service's namespace goes in quotes
public class Creds : SoapHeader
{
public string Username;
public string Password;
}
}
_
次に、生成されたプロキシクラスで、サービスを呼び出すメソッドで、J Dudgeonのステップ4に従って、次の属性を追加します。[SoapHeader("credHeader", Direction = SoapHeaderDirection.In)]
最後に、生成されたプロキシメソッドの呼び出しをヘッダー付きで示します。
_using (MyService client = new MyService())
{
client.credHeader = new Creds();
client.credHeader.Username = "username";
client.credHeader.Password = "pwd";
rResponse = client.MyProxyMethodHere();
}
_