Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WCF REST服务中获得职位或投入工作_C#_Wcf_Linq - Fatal编程技术网

C# 在WCF REST服务中获得职位或投入工作

C# 在WCF REST服务中获得职位或投入工作,c#,wcf,linq,C#,Wcf,Linq,我有一个WCF服务,我可以从中获得,但我不知道如何使用它。我只想在客户端每次使用记录时增加一个hits字段。这是我的一些代码 接口: [OperationContract] [WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "IncSMS")] void IncSMS(); 方法

我有一个WCF服务,我可以从中获得,但我不知道如何使用它。我只想在客户端每次使用记录时增加一个hits字段。这是我的一些代码

接口:

[OperationContract]
[WebInvoke(Method = "PUT",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "IncSMS")]
void IncSMS();
方法:

public void IncSMS()
{
    var business =
        (from p in _db.Businesses
            where p.BusinessID == 1
            select p).FirstOrDefault();
    business.SMSHits += 1;
    _db.SaveChanges();
}
在IE中,有人能看出我做错了什么吗

干杯


Mike.

如果您想发送
PUT
,请尝试使用,它将允许您使用任何HTTP方法生成请求、修改请求头、查看响应头等。这对于测试WCF服务非常有用。

不允许的方法通常意味着,在客户端,您使用的HTTP方法与您在WCF代码中配置的方法不匹配。在您的例子中,您已经指定PUT作为该WCF公开服务方法的HTTP方法。可能是在属性为PUT时使用了HTTPPOST

如果您使用Fiddler,您将能够看到请求和响应。如果问题如我所述,那么当您发送帖子时,原始响应将如下所示:

HTTP/1.1 405 Method Not Allowed
Allow: PUT
Content-Length: 1565
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Thu, 10 Nov 2011 02:17:43 GMT

回答中的“允许”标题将告诉您:请使用PUT。

好吧,我问了这个问题,花了三天时间才找到了一些本应非常简单的问题的答案

因此,问题最终是:如何在请求中添加
内容长度
标题

答:在浏览器中键入内容时,不能将内容长度添加到URI中,“因为默认情况下它将执行GET”!!!要将
内容长度
添加到标题中,您必须使用调试工具,例如Fiddler或构建表单或其他类型的客户端

在fiddler中,您只需在“请求生成器”的“请求头”部分键入
内容长度
:0,它就会神奇地工作!如本教程底部所示:

谢谢各位


Mike。

如果你在IE中做请求,那不是做一个get吗?您是否尝试过使用wfetch之类的工具?如果人们不打算处理“OrDefault”场景,为什么不使用First()函数?@LukeBaulch它会推迟一行出现异常。如果我更改请求以获取错误400“服务器在处理请求时遇到错误。有关详细信息,请参阅服务器日志。”我也不能让PUT方法工作。不允许继续获取方法。这里有几个答案,我猜你们都说代码没有问题,它应该工作,所以其他地方一定有问题?Fiddler给我的错误与IE 405“找不到方法”相同Fiddler在PUT和POST上都给了我411错误,询问内容长度这是怎么回事???我也看不到你在Fiddler中显示的结果,可能是因为我有免费版本???Cheeso,如果我使用PUT的POST istead,我现在得到的结果与你上面提到的完全相同,反之亦然,但如果我做得正确,我会得到“HTTP错误411。请求必须分块或具有内容长度”如果我使用GET,我得到错误400服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志,有什么想法吗???如果需要,我可以检查我的请求…lol。要诊断411,您需要描述调用WCF服务的客户端方法。是否使用jQuery?其他AJAX库?正在构建请求您自己“手动”?我认为解决方案很简单。你不需要分块,只需在请求中添加
内容长度
标题。411似乎对此有所抱怨。你也可以在Fiddler中查看请求,并验证
内容长度
标题是否丢失。抱歉,Cheeso,我没有注意到你的新响应。我现在知道了现在我必须在我的请求中添加一个内容长度头。我只是不知道怎么做。我只是通过浏览器中的URI和Fiddler中的URI来请求服务方法。所以我现在的问题是,如何在我的请求中添加一个内容长度头???干杯,迈克。这些是URL。这不是代码。应用程序如何调用服务s?连接到服务的客户端代码在哪里?刚才注意到您有“联系人长度:0”。您是说“内容长度:0”对吗?复制并粘贴了它,直到不久后我发现错误时才起作用