gpt4 book ai didi

xml - 使用 WebInvoke 在 WCF REST 服务主体中传递 XML 字符串

转载 作者:数据小太阳 更新时间:2023-10-29 01:54:38 24 4
gpt4 key购买 nike

我是 WCF、REST 等的新手。我正在尝试编写服务和客户端。我想将 xml 作为字符串传递给服务并获得一些响应。

我试图将正文中的 xml 传递给 POST 方法,但是当我运行我的客户端时,它只是挂起。

当我更改服务以接受参数作为 uri 的一部分时,它工作正常。(当我将 UriTemplate 从“getString”更改为“getString/{xmlString}”并传递一个字符串参数时)。

我正在粘贴下面的代码。

服务

[ServiceContract]
public interface IXMLService
{
[WebInvoke(Method = "POST", UriTemplate = "getString", BodyStyle=WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]

[OperationContract]
string GetXml(string xmlstring);
}

//实现代码

public class XMLService : IXMLService
{
public string GetXml(string xmlstring)
{
return "got 1";
}
}

客户端

string xmlDoc1="<Name>";        
xmlDoc1 = "<FirstName>First</FirstName>";
xmlDoc1 += "<LastName>Last</LastName>";
xmlDoc1 += "</Name>";

HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(@"http://localhost:3518/XMLService/XMLService.svc/getstring");
request1.Method = "POST";
request1.ContentType = "application/xml";
byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1);
request1.GetRequestStream().Write(bytes, 0, bytes.Length);

Stream resp = ((HttpWebResponse)request1.GetResponse()).GetResponseStream();
StreamReader rdr = new StreamReader(resp);
string response = rdr.ReadToEnd();

有人能指出其中的错误吗?

最佳答案

更改您的操作契约(Contract)以使用 XElement 和 BodyStyle 的 Bare

[WebInvoke(Method = "POST", 
UriTemplate = "getString",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
string GetXml(XElement xmlstring);

此外,我怀疑您的客户端代码应该包含(注意第一个 +=):

string xmlDoc1="<Name>";
xmlDoc1 += "<FirstName>First</FirstName>";
xmlDoc1 += "<LastName>Last</LastName>";
xmlDoc1 += "</Name>";

关于xml - 使用 WebInvoke 在 WCF REST 服务主体中传递 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6253163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com