【问题标题】:Creating a JSON enabled WCF Svc service manually手动创建启用 JSON 的 WCF Svc 服务
【发布时间】:2011-01-03 12:01:36
【问题描述】:

如何通过覆盖 createhost 函数来创建正确的启用 JSON 的 WCF svc 服务?

这是我尝试过的...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel.Activation;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Web;

namespace WcfJsonServiceToGetImages
{
    public class Class1 : WebScriptServiceHostFactory
    {
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {    
            ServiceHost host = new ServiceHost(typeof(Service1),baseAddresses);
           foreach(Uri uri in baseAddresses)
            {       
          WebHttpBinding webbinding=new WebHttpBinding(WebHttpSecurityMode.None);
            webbinding.AllowCookies=true;
            webbinding.CrossDomainScriptAccessEnabled=true;
            EndpointAddress ea=new EndpointAddress(uri);           
            WebHttpBehavior behavior = new WebHttpBehavior();
            behavior.DefaultOutgoingResponseFormat = WebMessageFormat.Json;
            behavior.DefaultBodyStyle = WebMessageBodyStyle.Wrapped;      
            behavior.HelpEnabled = true;               
            behavior.DefaultOutgoingRequestFormat = WebMessageFormat.Json;
           ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IService1), webbinding, uri);
           endpoint.Behaviors.Add(behavior);         
          }            
            return host;        
        }
    }
}

这是我的 svc 文件的内容..

<%@ ServiceHost Language="C#" Debug="true" Service="WcfJsonServiceToGetImages.Service1" CodeBehind="Service1.svc.cs" Factory="WcfJsonServiceToGetImages.Class1" %>

接口和实现类包含在创建新的 WCF svc 服务时生成的默认代码。它完全没有受到影响。 请指导我让这个自定义服务主机工厂工作以托管 JSON 服务。

编辑:我基本上希望能够通过http://localhost:portno/service1.svc/js访问服务

非常感谢。

【问题讨论】:

  • 那是什么不起作用?你有错误吗? XML而不是JSON?这里真正的问题是什么?乍一看,您的代码看起来不错...
  • 好的,我实际上没有得到任何 JSON 输出。它一直说端点不匹配,等等等等……我一个接一个地出错。我基本上想知道如何制作这个被覆盖的函数工作。我相信这里可能有很多 WCF 专家......
  • 向我们展示服务器配置,您的 *.svc 文件是什么样的,它位于何处?如果端点不匹配,则通常与地址和/或绑定有关。您只向我们展示了您的服务器代码 - 我们无法确定客户端是否与您在这里尝试执行的操作相匹配!
  • 我没有使用 Web.Config 中的任何设置。我将发布我的 svc 文件内容和界面...
  • 接口和类有默认代码...没有改动

标签: c# wcf json


【解决方案1】:

找到解决方案... 我不得不使用 WebScriptEnablingBehavior 而不是 WebHttpBehavior。

这是工作代码....希望它能为某人节省时间....

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel.Activation;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Web;

namespace WcfJsonServiceToGetImages
{
    public class Class1 : WebScriptServiceHostFactory
    {
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {    
            ServiceHost host = new ServiceHost(typeof(Service1),baseAddresses);
           foreach(Uri uri in baseAddresses)
            {       
          WebHttpBinding webbinding=new WebHttpBinding(WebHttpSecurityMode.None);
            webbinding.AllowCookies=true;
            webbinding.CrossDomainScriptAccessEnabled=true;
            EndpointAddress ea=new EndpointAddress(uri);           
            WebScriptEnablingBehavior behavior = new WebScriptEnablingBehavior();
            behavior.DefaultOutgoingResponseFormat = WebMessageFormat.Json;
           // behavior.DefaultBodyStyle = WebMessageBodyStyle.WrappedRequest;      



            behavior.DefaultOutgoingRequestFormat = WebMessageFormat.Json;
           ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IService1), webbinding, uri);
           endpoint.Behaviors.Add(behavior);         
          }            
            return host;        
        }
    }
}

【讨论】:

  • 所以这意味着您是从 Ajax 或 jQuery 风格的客户端调用它?这些关键信息应该是您原始帖子的一部分.....
  • 不,我无法通过放置 /js 或 /jsdebug 来访问 json 代码。只有在这个修改之后,它才有效。我希望我现在听起来更清楚一点......
猜你喜欢
  • 2015-05-28
  • 1970-01-01
  • 2011-08-12
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多