2013-09-24 9 views
8

Webサービスを呼び出す前に、C#でカスタムSOAPヘッダー情報を追加しようとしています。私はこれを行うためにSOAPヘッダークラ​​スを使用しています。私はこれを部分的に行うことができますが、私はそれが必要な方法を完全にはできません。ここでは、私は私がラップ「セキュリティ」の要素を追加している行うことができないのです何Webサービス呼び出しのためにC#でカスタムSOAPHeaderを追加する

<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> 

以下のように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ヘッダーを必要とする方法であります最初のサンプルと同じ "UsernameToken"。どんな助けもありがとう。

答えて

1

このリンクadding soap headerは私のために働いた。 SOAP 1.1サービスを私は書いていないと呼んでおり、制御できません。 VS 2012を使用して、私のプロジェクトでWeb参照としてサービスを追加しました。これがうまくいきたいです

私は、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(); 
} 
+0

サンプルコードを提供する任意のチャンス?前もって感謝します。 (私はリンク/手順を見て、彼/ Dudgeonのサンプルコードで彼の質問を調整しようとしていますが、セキュリティヘッダーの要件を翻訳する方法について私に直接には対応しません)。 – Terry

+1

上記を参照してください。サンプルコードをいくつか追加しました。希望は、 –

+0

ところで - これはWCFサービスではない、おそらくそれはいくつかに明らかです –

関連する問題