C# 使用 SOAP 将对象发送到 webservice

标签 c# web-services soap httpwebrequest

我有一个类:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="MyClass", Namespace="http://model.common.party.ent.gfdi.be")]
[System.SerializableAttribute()]
public class MyClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged 
{

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string firstname;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string lastname;
}

我创建一个实例:

   var myClass = new MyClass() { lastname = "AAA", firstname = "BBB" };

我想将这个实例发送到网络服务。

我想将此对象发送到网络服务。 Web 服务收到的消息应如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:membership="http://service.common.party.ent.gfdi.be 
http://service.common.party.ent.gfdi.be">
   <soapenv:Header/>
   <soapenv:Body>
      <membership:find>
         <membership:in0>
           <membership:lastname>AAA</membership:lastname>
           <membership:firstname>BBB</membership:firstname>
         </membership:in0>
      </membership:find>
   </soapenv:Body>
</soapenv:Envelope>

我试过这个:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(myurl);
webRequest.Headers["Authorization"] = "Basic " + "XXXXXXXXXXXXXX=";
webRequest.ContentType = "text/xml; charset=UTF-8";
webRequest.Method = "POST";

XmlDocument soapEnvelopeXml = CreateSoapEnvelope();
InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);

IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);

asyncResult.AsyncWaitHandle.WaitOne();

string soapResult;
using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
{
    using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
    {
        soapResult = rd.ReadToEnd();
    }
    Console.Write(soapResult);
}

private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
{
    using (Stream stream = webRequest.GetRequestStream())
    {
        soapEnvelopeXml.Save(stream);
    }
}

private static XmlDocument CreateSoapEnvelope()
{
    XmlDocument soapEnvelop = new XmlDocument();
    soapEnvelop.LoadXml(@"<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/1999/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/1999/XMLSchema""><SOAP-ENV:Body><HelloWorld xmlns=""http://tempuri.org/"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""><int1 xsi:type=""xsd:integer"">12</int1><int2 xsi:type=""xsd:integer"">32</int2></HelloWorld></SOAP-ENV:Body></SOAP-ENV:Envelope>");
    return soapEnvelop;
}

有什么想法吗?

谢谢,

最佳答案

阅读您的评论我会做以下事情:

  • 我会请求 Web 服务 URL 的用户名/密码,并使用 Internet Explorer(在 visual studio 之外)进行身份验证。

  • 然后在项目中,使用添加服务引用-->高级-->添加网络引用。选项并引入不应请求身份验证的 URL,因为 IExplorer 已通过身份验证。

  • 如果您设法获取 WSDL 服务描述解析并创建 WS 类,那么您就完成了,因为一旦您想要使用 web 服务,您就可以向 web 服务提供基本身份验证:

    WebServiceClass wsClass = new WebServiceClass();
    wsClass .Credentials = new System.Net.NetworkCredential("user", "password");
    

关于C# 使用 SOAP 将对象发送到 webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19487221/

相关文章:

C# HttpWebRequest 显示 404,但可以在浏览器中访问网站

java - 如果两个服务都位于同一项目中,如何从其他服务调用一个 Web 服务方法?

web-services - noHandlerFound 未找到具有 URI [..] 的 HTTP 请求的映射

soap - 如果队列中没有作业,Quickbooks Web 连接器会响应

java - 使用 JavaEE 的 SOAP 自定义身份验证

c# - 如何在 cpp 可执行文件中嵌入 licence.licx 文件?

C# 打印屏幕 | GDI+ 中发生一般性错误。

c# - 异常处理类

java - 如何用mysql表中的新条目覆盖旧条目?

web-services - 客户端 spring-ws 连接池是否可能?