Windows Phone的SOAP头

3

我在添加SOAP消息头信息时遇到了问题。有没有人知道如何正确地添加它呢?

我成功地添加了验证器部分,但仍然无法像下面展示的那样在验证器内添加用户名和密码。您可以看到下面的C#代码!

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
  <soap:Header> 
    <Authenticator xmlns="http://www.namespacename.com/services/"> 
      <UserName>string</UserName> 
      <Password>string</Password> 
    </Authenticator> 
  </soap:Header> 
  <soap:Body> 
    <ListItems xmlns="http://www.namespacename.com/services/"> 
      <strCode>string</strCode> 
    </ListItems> 
  </soap:Body> 
</soap:Envelope> 

C# 代码

var client = new MySoapClient();
client.GetListCompleted += (a, b) =>
{
    var list = b.Result;
};

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
    MessageHeader header = MessageHeader.CreateHeader("Authenticator", "http://......./", credentials);
    OperationContext.Current.OutgoingMessageHeaders.Add(header);
    client.GetListAsync(App.CouponCampaignCode);
}

public class _ServiceCredential
{
    [XmlAttribute(Form = System.Xml.Schema.XmlSchemaForm.None)]
    [DataMember(Order = 2)]
    public string Password;
    [DataMember(Order = 1)]
    [XmlAttribute(Form = System.Xml.Schema.XmlSchemaForm.None)]
    public string UserName;
}

您是否收到了任何特定的错误消息? - Dave Hogan
我实际上从服务器得到了一个定制的回复,说我发送的数据不正确,但是用户名和密码确实存在(使用Fiddler进行了检查)。 - user1747573
使用 Fiddler,我已经能够手动修改 SOAP 消息,以找出 SOAP 中不正确的部分。 - user1747573
使用 Fiddler,我可以找出SOAP消息中不正确的内容。<Authenticator xmlns="http://www.namespacename.com/services/"> <UserName xmlns="http://schemas.datacontract.org/2004/07/TestApp.App">myUserName</UserName> <Password xmlns="http://schemas.datacontract.org/2004/07/TestApp.App">myPassword</Password> </Authenticator> - user1747573
Fiddler非常适合追踪此类问题。那么我假设您现在知道问题是什么了? - Dave Hogan
1个回答

0
private void callWebservice()
{
    NetworkCredential credentials = new NetworkCredential(userName, Password, domain);
    HttpWebRequest request = CreateWebRequest(url, credentials);
    XDocument soapEnvelope = CreateSoapEnvelope(soapEnvelope );
    InsertSoapEnvelopeIntoWebRequest(soapEnvelope, request);
}

private static HttpWebRequest CreateWebRequest(string url, NetworkCredential credentials)
   {
        string action = link;// my action link
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
        req.Credentials = credentials;
        req.Headers["SOAPAction"] = action;
        req.ContentType = "text/xml;charset=\"utf-8\"";
        req.Accept = "text/xml";
        req.Method = "POST";
        return req;
    }

private static XDocument CreateSoapEnvelope(string content)
{
    XDocument soapEnvelopeXml = XDocument.Parse(content);
    return soapEnvelopeXml;
}

private static void InsertSoapEnvelopeIntoWebRequest(XDocument soapEnvelopeXml,                          HttpWebRequest webRequest)
{
    webRequest.BeginGetRequestStream((IAsyncResult asynchronousResult) =>
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        Stream postStream = request.EndGetRequestStream(asynchronousResult);
        soapEnvelopeXml.Save(postStream);
        postStream.Close();

        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
    }, webRequest);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接