手动创建启用JSON的WCF Svc服务

时间:2010-01-10 16:18:38

标签: c# wcf json

如何通过覆盖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

访问该服务

非常感谢。

1 个答案:

答案 0 :(得分:2)

找到解决方案...... 我不得不使用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;        
        }
    }
}