【发布时间】: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 文件内容和界面...
-
接口和类有默认代码...没有改动