尝试在 asp.net 中创建 json Web 服务时出错
Posted
技术标签:
【中文标题】尝试在 asp.net 中创建 json Web 服务时出错【英文标题】:Error when trying to create json web service in asp.net 【发布时间】: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" %>
【问题讨论】:
【参考方案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 概念。
马克
【讨论】:
谢谢我改成: <endpointBehaviors>
<behavior name="EndPointBehaviorLarge">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
【讨论】:
以上是关于尝试在 asp.net 中创建 json Web 服务时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net c# 中创建 iPhone 推送通知 Web 服务
是否可以在 ASP.NET Web API 中创建中间件?我参考了网上的资料并尝试过,但没有成功
在c#asp.net core web api中创建jwt令牌[重复]
如何在 ASP .Net (Aspx) 中创建要从 Javascript 访问的 Web 服务方法?