通过Javascript,AJAX或JQuery调用WCF服务

时间:2011-01-13 03:42:17

标签: asp.net ajax wcf

我创建了许多标准WCF服务(服务合同和主机(svc)都在单独的程序集中)。我在IIS中启动了一个网站来托管服务(即地址为http://services:1000/wcfservices.svc)。

然后在我的网站项目中添加了引用。我可以正常调用这些服务。我需要调用客户端的一些服务。不确定我是否应该查看通过AJAX,JQuery或支持JSON的WCF服务调用WCF服务的文章。任何人都可以提供任何关于配置的想法或经验吗?

我所做的一些更改是在操作合同中添加以下内容:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "SetFoo")]
void SetFoo(string Id);

然后在上面执行界面:

[AspNetCompatibilityRequirements(RequirementsMode = 
                            AspNetCompatibilityRequirementsMode.Allowed)]

然后在服务webconfig中我有这个(parens是尖括号):

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
  <baseAddressPrefixFilters>
    <add prefix="http://services:1000/wcfservices.svc/"/>>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />

然后在客户端我尝试了这个:

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
    <compositeScript>
        <Scripts>
            <asp:ScriptReference 
                      Path="http://Flixsit:1000/FlixsitWebServices.svc" />
        </Scripts>
    </CompositeScript>
</asp:ScriptManagerProxy>

我试图在javascript中调用这样的服务:

wcfservices.SetFoo(string Id);  

什么都没有用。如果是想法或更好的解决方案来调用JSON启用,JQuery等......我愿意做出任何改变。

感谢您提供的任何建议/提示......

1 个答案:

答案 0 :(得分:0)

相同的源策略将阻止客户端对位于与提供网页的域不同的域(不同主机)中的服务进行AJAX调用。您可以使用JSONP而不是JSON来完成此工作。您需要更改服务以接受回调函数,并使用JSON数据向客户端提供一些调用此回调的javascript。