javascript - 使用 JavaScript 来使用 WCF,但保持它对于所有客户端来说足够通用?

标签 javascript wcf internet-explorer mozilla

我想为我的客户创建一个 Web 服务,以便他们可以在自己的网站上显示数据。由于我不知道每个客户端正在运行什么平台,因此创建可供所有浏览器使用的 WCF 服务代理的最佳解决方案是什么?另外,我不确定应该如何呈现数据。假设我的用户没有任何开发技能。我将通过其他一些界面,让用户能够下载创建请求所需的代码,然后处理响应。在客户端解析 xml 响应然后创建数据列表或已格式化列表(以字符串形式)并让客户端执行 document.write 会更好吗?我看过一些解决方案,但它们似乎需要使用带有脚本管理器的 ASP 页面。就像我说的,我想要一些足够通用的东西来使用不同的浏览器。主要是IE和FireFox。

丹尼尔

最佳答案

首先,由于您不想依赖 Microsoft Ajax ScriptManager,因此不要在端点Behaviors/behavior 中使用 。它是 Microsoft 特定的 JSON。

幸运的是,WCF 可以让您的客户轻松决定是否需要 XML 还是通用 JSON。

  1. 使用行为。

    <端点行为>
    <行为名称=“My.WcfServices.webHttpBehavior”>



  2. 创建自定义 WebServiceHost 和自定义属性,如中所述 Damian Mehers' blog, WCF REST Services 。在 Mehers 的代码中,类型由请求内容类型决定。您可能希望扩展它以检查 URL,例如 .xml 或 .json 或 ?format=xml|json。

  3. SerializeReply 方法中,检查 URL。

    消息请求 = OperationContext.Current.RequestContext.RequestMessage;
    Uri url = request.Properties["OriginalHttpRequestUri"] as Uri;
    //检查?格式化查询字符串
    System.Collections.Specialized.NameValueCollection colQuery = System.Web.HttpUtility.ParseQueryString(url.Query);
    字符串 strResponseFormat = colQuery["格式"];
    //或检查扩展
    字符串 strResponseFormat = url.LocalPath.Contains(".json") ? “json”:“xml”;

  4. 定义您的方法

    [运营契约(Contract)]
    [WebGet(UriTemplate="Hello.{responseFormat}")]//或 "Hello?format={responseFormat}"
    [动态响应类型]
    公共(public)字符串Hello(字符串响应格式)
    {
    返回“Hello World”;
    }

示例网址:
http://localhost/myrest.svc/Hello.xml
http://localhost/myrest.svc/Hello.json

http://localhost/myrest.svc/Hello?format=xml
http://localhost/myrest.svc/Hello?format=json

  • JSON 和 XML 都很容易跨浏览器使用。诸如用于 JSON 的 jQuery 和用于 XML 的 Sarissa 等库使这一切变得更加容易。
  • 注意:如果您看到错误“无法找到与绑定(bind) WebHttpBinding 的端点的方案 http 相匹配的基地址。”,请添加 baseAddressPrefixFilters 元素并将 localhost(或任何您的域)添加到IIS 主机 header 名称。

    <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
        <baseAddressPrefixFilters>
            <add prefix="http://localhost"/>
        </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    

    关于javascript - 使用 JavaScript 来使用 WCF,但保持它对于所有客户端来说足够通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/934859/

    相关文章:

    javascript - 如何设置从对 .js 或 json 文件的响应中收到的值

    javascript - datatables.js 不重新加载仅显示

    c# - WCF 是否进行 CRL/OCSP 证书检查?

    css - @font-face 不显示在 Internet Explorer 上

    asp.net - IE 不提供保存 ASP.NET 表单的密码

    javascript - Sinon js 调用 PUT 或 POST 方法

    Javascript 提交功能

    c# - 如何将大图像从 wp7 发送到 wcf?

    c# - WCF 持久服务是正确的选择吗?

    css - 在 IE 中更改 TinyMCE 表的边框颜色