尝试在asp.net中创建json Web服务时出错

时间:2009-09-19 13:12:50

标签: asp.net wcf web-services json wcf-rest

我按照这个在asp.net 3.5中创建一个json web服务:

  

Creating JSON-enabled WCF services in .NET 3.5 (archive.org)

(当时:http://www.pluralsight.com/community/blogs/fritz/archive/2008/01/31/50121.aspx

如果我想在内部使用它,它工作正常,但因为我想连接到它外部我得到一个错误说:“此服务的元数据发布目前已禁用。”

所以我尝试启用它,但现在我收到错误:“无法将'serviceMetadata'行为扩展添加到'MyServiceAspNetAjaxBehavior'端点行为,因为基础行为类型没有实现IEndpointBehavior接口。”

我知道我在web.config中做错了什么,只是无法搞清楚,我做错了什么?谢谢!

这是在web.config中:

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="MyServiceAspNetAjaxBehavior">
      <enableWebScript />
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </endpointBehaviors>
</behaviors>

//Needed to add this to be able to use the web service on my shared host
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
  <baseAddressPrefixFilters>
    <add prefix="http://www.domain.com"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

<services>
  <service name="MyService">
    <endpoint address="" behaviorConfiguration="MyServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="MyService" />
    <endpoint contract="MyService" binding="mexHttpBinding" address="mex" />

  </service>
</services>

在MyService.cs中:

using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
    [OperationContract]

    public string GetForecast(string str)
    {
        return "Hello World";
    }
}

在MyService.svc

<%@ ServiceHost Language="C#" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>

1 个答案:

答案 0 :(得分:1)

您的MEX端点(用于元数据交换的端点)需要具有特定的系统给定合同IMetadataExchange(您的配置中出错):

<services>
  <service name="MyService">
    <endpoint 
        address="" 
        behaviorConfiguration="MyServiceAspNetAjaxBehavior" 
        binding="webHttpBinding"   
        contract="MyService" />
    <endpoint 
        address="mex"
        binding="mexHttpBinding" 
        contract="IMetadataExchange"   />
  </service>
</services>

根据该合同,您应该能够看到您的元数据。

警告语:RESTful服务通常不公开任何元数据,例如WSDL或XSD--这实际上是SOAP概念。

马克