我正在使用C#编写Web服务客户端,不想创建和序列化/反序列化对象,而是发送和接收原始的XML数据。
在C#中是否有这种可能性?
在C#中是否有这种可能性?
这是我刚刚根据John M Gant的示例运行的一部分实现。设置内容类型请求头非常重要。此外,我的请求需要凭据。
protected virtual WebRequest CreateRequest(ISoapMessage soapMessage)
{
var wr = WebRequest.Create(soapMessage.Uri);
wr.ContentType = "text/xml;charset=utf-8";
wr.ContentLength = soapMessage.ContentXml.Length;
wr.Headers.Add("SOAPAction", soapMessage.SoapAction);
wr.Credentials = soapMessage.Credentials;
wr.Method = "POST";
wr.GetRequestStream().Write(Encoding.UTF8.GetBytes(soapMessage.ContentXml), 0, soapMessage.ContentXml.Length);
return wr;
}
public interface ISoapMessage
{
string Uri { get; }
string ContentXml { get; }
string SoapAction { get; }
ICredentials Credentials { get; }
}
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(url);
req.ContentLength = content.Length;
req.Method = "POST";
req.GetRequestStream().Write(Encoding.ASCII.GetBytes(content), 0, content.Length);
HttpWebResponse resp = (HttpWebResponse) req.getResponse();
//Read resp.GetResponseStream() and do something with it...
这种方法很有效。但是,你需要做的任何事情都可以通过继承现有的代理类并覆盖你需要不同行为的成员来实现。在我看来,这种类型的事情最好保留给没有其他选择的时候,而这种情况并不经常发生。
XmlNode
。[WebMethod]
public XmlNode MyMethod(XmlNode input);
您可以让您的 Web 服务方法返回一个包含 XML 的字符串,但请注意上面的评论,避免使事情变得更容易出错。