【问题标题】:Error when trying to create json web service in asp.net尝试在 asp.net 中创建 json Web 服务时出错
【发布时间】:2010-11-29 17:32:37
【问题描述】:

我按照这个在 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" %>

【问题讨论】:

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


    【解决方案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 概念。

    马克

    【讨论】:

    • 谢谢我改成: 但是还是出现同样的错误,我需要在我的 web 服务文件中进行更改吗?
    • 我只想从我的 iphone 调用一个简单的 json web 服务,这难道不能用 asp.net 吗?我在这里缺少什么吗?
    • 是的,这是可能的——你只是不能有任何与之关联的元数据(REST 服务不知道这个概念)
    【解决方案2】:
      <endpointBehaviors>
        <behavior name="EndPointBehaviorLarge">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </endpointBehaviors>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      相关资源
      最近更新 更多