【发布时间】:2014-04-05 04:36:31
【问题描述】:
我在我的 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,则相同的功能正在工作
这是我购买的 WCF.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’的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为没有端点可以在客户端元素中找到与此合同匹配的元素。”
之后参考一些网站,我添加了上面的代码并得到“方法不允许”错误 我在这上面浪费了一整天...请帮我找出问题...
【问题讨论】:
-
您是否在 IIS 上激活了 WCF 托管?例如,关于如何在 IIS 2012 中执行此操作,请参阅 stackoverflow.com/questions/14082950/…