我已经在我的web项目中创建了一个支持Ajax的WCF,它使用一种简单的方法返回消息“Hello World”并将其托管在IIS中。当我从浏览器调用WCF时,它正在工作并显示消息,如
{“d”:“Hello World”}
我创建了一个Windows应用程序并添加了如下代码来访问wcf
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
EndpointAddress epa = new EndpointAddress("http://localhost:60/wcf");
ServiceReference2.PurchaseWCFClient objk = new ServiceReference2.PurchaseWCFClient(binding,epa);
label1.Text = objk.DoWork();
但是这段代码
label1.Text = objk.DoWork();
返回错误,指出“远程服务器返回了意外响应:(405)方法不允许。”
我在谷歌搜索了很多,尝试了很多方法,但没有任何作用。我是WCF的新手,对WCF没有多少了解。
如果我使用javascript调用或ajax调用从同一个项目调用WCF,则相同的功能正常工作
这是我的purchaseWCF.svc.cs包含的内容
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class PurchaseWCF
{
[WebGet()]
[OperationContract]
public string DoWork()
{
return "Hello World";
}
}
我的web.config包含
<service name="InfraERP.WCF.PurchaseWCF">
<endpoint address="" behaviorConfiguration="InfraERP.WCF.PurchaseWCFAspNetAjaxBehavior"
binding="webHttpBinding" contract="InfraERP.WCF.PurchaseWCF" />
</service>
<behavior name="InfraERP.WCF.PurchaseWCFAspNetAjaxBehavior">
<enableWebScript />
最初我试过像这样使用
ServiceReference2.PurchaseWCFClient objk = new ServiceReference2.PurchaseWCFClient();
此时我收到类似的错误“无法在ServiceModel客户端配置部分找到引用合同'ServiceReference2.PurchaseWCF'的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为没有端点匹配此合同的元素可以在客户端元素中找到。“
之后引用一些网站,我添加了上面的代码,并得到“方法不允许”错误 我浪费了一整天......请帮我找出问题......
答案 0 :(得分:0)
解决问题的可能方法,
(i)从服务引用中完全删除引用,也可以从配置中手动删除。
(ii)再次添加服务引用,检查服务中的合同名称和客户端配置。