gpt4 book ai didi

c# - HTTP POST 到 WCF 服务

转载 作者:行者123 更新时间:2023-11-30 19:47:04 25 4
gpt4 key购买 nike

我试图通过 HTTP POST 调用 WCF 服务,但该服务返回 400 错误。我不知道这是由于 OperationContract 还是我执行 POST 的方式造成的。这是契约(Contract)在服务器端的样子:

[OperationContract, WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
Stream Download(string username, int fileid);

下面是我尝试通过测试控制台应用程序调用服务的方式:

HttpWebRequest webRequest = WebRequest.Create("http://localhost:8000/File/Download") as   
HttpWebRequest;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
byte[] bytes = Encoding.ASCII.GetBytes("username=test&fileid=1");
Stream os = null;
webRequest.ContentLength = bytes.Length;
os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
WebResponse webResponse = webRequest.GetResponse();

编辑:我应该明确表示我的目标是测试服务,而不是让它接受原始 HTTP POST。如果我有更好的方法来测试该服务,请随时分享。

最佳答案

这是一个非常简单的过程,但不容易访问或直接(不幸的是,WCF 的许多方面都是这种情况)请查看 this发帖澄清:

服务契约(Contract):

[ServiceContract]
public interface ISampleService
{
[OperationContract]
[WebInvoke(UriTemplate = "invoke")]
void DoWork(Stream input);
}

HTML 来源:

<form method="post" action="Service.svc/invoke">
<label for="firstName">First Name</label>: <input type="text" name="firstName" value="" />
<br /><br />
<label for="lastName">Last Name</label>: <input type="text" name="lastName" value="" />
<p><input type="submit" /></p>
</form>

代码隐藏:

public void DoWork(Stream input)
{
StreamReader sr = new StreamReader(input);
string s = sr.ReadToEnd();
sr.Dispose();
NameValueCollection qs = HttpUtility.ParseQueryString(s);
string firstName = qs["firstName"];
string lastName = qs["lastName"];
}

关于c# - HTTP POST 到 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357092/

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