asp.net-mvc – 为IIS托管的.SVC文件配置XML-RPC行为?
我正在使用
Clemens Vasters’ XML-RPC实现来实现XML-RPC端点.当我在控制台应用程序中托管服务时,它工作正常.
我想在ASP.NET MVC应用程序中托管它,所以我使用的是.SVC文件.这部分有效.当我浏览.SVC文件时,我看到通常的“你已经创建了一个服务”的东西. 但是,当我将XML-RPC客户端(Windows Live Writer)指向同一位置时,我收到“400 Bad Request”.我猜这是因为我的服务没有正确公开为XML-RPC. 我试过configure an endpoint behavior in Web.config,如下: <system.serviceModel> <services> <service name="AnotherBlogEngine.Web.Api.BlogApi"> <endpoint address="" binding="webHttpBinding" contract="AnotherBlogEngine.Web.Api.IBlogApi" behaviorConfiguration="xmlRpcBehavior" /> </service> </services> <extensions> <behaviorExtensions> <add name="xmlRpc" type="AnotherBlogEngine.XmlRpc.XmlRpcEndpointBehaviorElement, AnotherBlogEngine.XmlRpc" /> </behaviorExtensions> </extensions> <behaviors> <endpointBehaviors> <behavior name="xmlRpcBehavior"> <xmlRpc/> </behavior> </endpointBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> ……但它不起作用.我究竟做错了什么?我的Web.config是否正确,还是我完全错了?我是否需要在.SVC文件中提供自定义工厂来整理行为? 顺便说一句,.SVC文件看起来像这样: <%@ ServiceHost Language="C#" Debug="true" Service="AnotherBlogEngine.Publishing.Service.BlogApi, AnotherBlogEngine.Publishing.Service" %> 注意:那些反斜杠实际上并不存在;它们只是用于包装线. 此外,目前,我只是在Cassini(VS2010)中测试它,而不是IIS,但我将瞄准IIS 7.x. 更新:它肯定至少在查看我的扩展:它调用XmlRpcEndpointBehaviorElement.get_BehaviorType,如果XmlRpcEndpointBehavior没有实现IEndpointBehavior,我会收到一个错误(显示代替“你已创建服务”页面). 但是,任何一个类中其他方法的断点都不会受到影响. 如果我打开WCF跟踪,我会在日志文件中看到“无法识别的消息版本”. 解决方法
以下是实现此工作的步骤:
>下载XML-RPC for WCF sample 在新项目中引用Microsoft.Samples.XmlRpc和TinyBlogEngine. 将test.svc文件添加到此Web应用程序,如下所示: <%@ ServiceHost Language="C#" Debug="true" Service="TinyBlogEngine.BloggerAPI,TinyBlogEngine" %> 将XmlRpcEndpointBehaviorExtension类添加到新项目: namespace TinyBlogEngineWeb { public class XmlRpcEndpointBehaviorExtension : BehaviorExtensionElement { protected override object CreateBehavior() { // this comes from Microsoft.Samples.XmlRpc return new XmlRpcEndpointBehavior(); } public override Type BehaviorType { get { return typeof(XmlRpcEndpointBehavior); } } } } 最后,web.config的system.serviceModel部分应如下所示: <system.serviceModel> <services> <service name="TinyBlogEngine.BloggerAPI" behaviorConfiguration="returnFaults"> <endpoint address="/blogger" binding="webHttpBinding" contract="TinyBlogEngine.IBloggerAPI" behaviorConfiguration="xmlRpcBehavior" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="returnFaults"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="xmlRpcBehavior"> <xmlRpc/> </behavior> </endpointBehaviors> </behaviors> <extensions> <behaviorExtensions> <add name="xmlRpc" type="TinyBlogEngineWeb.XmlRpcEndpointBehaviorExtension,TinyBlogEngineWeb" /> </behaviorExtensions> </extensions> </system.serviceModel> 最后修改控制台客户端应用程序以使用Web项目的地址并测试: Uri blogAddress = new UriBuilder( Uri.UriSchemeHttp,"localhost",1260,// use the appropriate port here "/test.svc/blogger" ).Uri; 使用Windows Live Writer和控制台客户端应用程序进行测试.你可以download my test solution from here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET C#使用列表导航如何在活动导航页面上设置id =“cur
- ASP.NET – 内联与代码隐藏
- asp.net-mvc-3 – asp.net mvc 3应用程序中的默认sessionSt
- ‘ASP._Page_sitecore_shell_client_Speak_Layouts_Layouts
- forms-authentication – 在OWIN托管的SignalR实现中接受AS
- asp.net – 如何使我的Web应用程序无状态仍然做一些有用的事
- asp.net – 两个DLL中都存在“ModelClientValidationRule”
- asp.net-mvc-4 – 如何在MVC 4中从tempdata获取对象
- 如何使用ASP.NET Core创建多部分HTTP响应
- asp.net – 为什么我要将UnitOfWork与Repository Pattern一
- asp.net-mvc – 如何构建一个企业MVC应用程序,业
- asp.net-mvc – 将Castle Windsor与SignalR集成
- asp.net-mvc-2 – 如何从ASP.NET页面运行冗长的任
- asp.net – 剑道:网格中的ComboBox – 将选定组
- asp.net – 如何在更新面板刷新后运行一些javasc
- asp.net-mvc – 如何将Home / Action / id映射到
- asp.net – 为什么当试图保存更改时,GridView行“
- asp.net – 在自动生成的GridView列中防止HTML编
- 在asp.net ajax刷新后的Cufon.refresh
- IIS 7中的应用程序池不显示.NET Framework 3.5