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-mvc – 从ASP.NET MVC2升级到MVC3的原因
- 如何在ASP.NET按钮中使用Twitter Bootstrap图标?
- ASP.NET MVC3角色和权限管理 – 具有运行时权限分配
- asp.net – 在双列表框中移动项目
- 使用ASP.NET MVC时从WebForm访问HtmlHelpers
- asp.net-mvc – 控制台应用程序HttpClient发布到mvc web ap
- asp.net-mvc – MS Ajax与jQuery在ASP.NET MVC应用程序中的
- asp.net – MVC 5 Web API与Facebook访问令牌到RegisterExt
- ASP.NET – 黑客死亡的黄色屏幕
- asp.net – WebForms:MasterPages中的动态(或绝对)脚本标记
- asp.net-mvc – ASP.NET MVC:Action中的授权 –
- asp.net-core – 在ASP.NET Core中使用Entity Fr
- asp.net – 我应该在哪里放置scriptmanager
- asp.net-mvc – Razor View语法无法识别HTML属性
- 准备ASP.Net网站进行渗透测试
- ASP.NET:请求cookie对于域名为null?
- asp.net – 如何从codebehind访问web.config的ht
- asp.net-mvc – 使用HtmlHelper类时,MVC单选按钮
- asp.net – 每个会话的NH请求 – “会话已关闭
- Asp.net下使用Jquery Ajax传送和接收DataTable的
