2013-09-24 52 views
8

Tôi đang cố gắng thêm thông tin tiêu đề xà phòng tùy chỉnh trong C# trước khi gọi dịch vụ web. Tôi đang sử dụng lớp tiêu đề SOAP để thực hiện việc này. Tôi có thể làm điều này một phần nhưng không hoàn toàn theo cách tôi cần. Dưới đây là cách tôi cần header xà phòng để trông giống nhưThêm SOAPHeader tùy chỉnh vào C# cho cuộc gọi dịch vụ web

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

tôi có thể thêm tiêu đề xà phòng như sau

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

gì tôi không thể làm là thêm "Security" yếu tố đó kết thúc tốt đẹp "UsernameToken" như trong mẫu đầu tiên. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

1

Liên kết này adding soap header đã hoạt động đối với tôi. Tôi đang gọi một dịch vụ SOAP 1.1 mà tôi không viết và không có quyền kiểm soát. Đang sử dụng VS 2012 và đã thêm dịch vụ làm tài liệu tham khảo web trong dự án của tôi. Hy vọng điều này sẽ giúp

Tôi đã làm theo các bước 1-5 từ bài đăng của J. Dudgeon về phía dưới cùng của chuỗi.

Dưới đây là một số mẫu mã (điều này sẽ được trong một file .cs riêng):

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

Và sau đó trong lớp proxy tạo ra, vào phương pháp mà các cuộc gọi dịch vụ, mỗi bước J Dudgeon 4 thêm này thuộc tính: [SoapHeader("credHeader", Direction = SoapHeaderDirection.In)]

cuối cùng, đây là cuộc gọi đến phương pháp proxy tạo ra, với tiêu đề:

using (MyService client = new MyService()) 
{ 
    client.credHeader = new Creds(); 
    client.credHeader.Username = "username"; 
    client.credHeader.Password = "pwd"; 
    rResponse = client.MyProxyMethodHere(); 
} 
+0

Bất kỳ cơ hội cung cấp mẫu mã? Cảm ơn trước. (Tôi đang xem liên kết/bước và cố gắng hòa giải câu hỏi của anh ấy với mã mẫu/Dudgeon của anh ấy, nhưng không trực tiếp tương ứng/nhấp vào với tôi về cách dịch yêu cầu tiêu đề bảo mật). – Terry

+1

Xem ở trên tôi đã thêm một số mã mẫu. Hy vọng rằng sẽ giúp –

+0

bằng cách này - đây không phải là một dịch vụ WCF, có lẽ đó là rõ ràng cho một số –

Các vấn đề liên quan