WCF + Xml-Rpc不起作用

时间:2014-09-25 14:19:29

标签: c# web-services wcf xml-rpc

我有一个经典的WCF网络服务。几周前,为了满足客户需求,我将Rest管理添加到我的网络服务中。

但是,在本周初,另一位客户告诉我,它的系统只能管理XML-RPC。所以他需要通过这个协议连接到我的网络服务。

所以我发现了这个:Configuring XML-RPC behavior for IIS-hosted .SVC file?

首先,我编译了Microsoft.Samples.XmlRpc,以便将其添加到我的项目中。出现两个Dll:Microsoft.Samples.XmlRpc& Microsoft.ServiceModel.XmlRpc

然后,我创建了一个XmlRpcEndpointBehaviorExtension类,与上面的帖子相同:

namespace WsZendesk
{
    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); }
        }
    }
}

之后,我为Xml-Rpc创建了我的界面:

namespace WsZendesk
{
    [ServiceContract]
    public interface IWsZendeskRpc
    {
        [OperationContract(Action = "wszendesk.GetUserIdFromBarcode")]
        void GetUserIdFromBarcode(String sXmlIn, out String sXmlOut);
    }
}

最后,我修改了我的web.config以允许RPC:

  <system.serviceModel>
    <services>
      <service name="WsZendesk.WsZendesk" behaviorConfiguration="WsZendeskServiceBehavior">
        <endpoint address="rest" behaviorConfiguration="restfulBehavior"
          binding="webHttpBinding" bindingConfiguration="" name="RESTEndPoint"
          contract="WsZendesk.IWsZendeskRest" />
        <endpoint address="xmlrpc" behaviorConfiguration="xmlRpcBehavior"
          binding="webHttpBinding" bindingConfiguration="" name="RPCEndPoint"
          contract="WsZendesk.IWsZendeskRpc" />
        <endpoint address="" behaviorConfiguration=""
          binding="basicHttpBinding" bindingConfiguration="" name="SOAPEndPoint"
          contract="WsZendesk.IWsZendesk" />
      </service>
    </services>
    <extensions>
      <behaviorExtensions>
        <add name="xmlRpc"
             type="WsZendesk.XmlRpcEndpointBehaviorElement, WsZendesk" />
      </behaviorExtensions>
    </extensions>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restfulBehavior">
          <webHttp />
        </behavior>
        <behavior name="xmlRpcBehavior">
          <xmlRpc />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="WsZendeskServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Visual Studio说他不了解子元素&x; xmlRpc&#39;。因此,当我尝试启动我的Web服务时,执行期间会出现相同的错误。

error in Visual Studio

error during execution

任何人都可以帮我在我现有的网络服务中使用Xml-Rpc吗?

有关信息,我的项目是在C#4中。

1 个答案:

答案 0 :(得分:0)

我太傻了。

不是这个:

<add name="xmlRpc"
type="WsZendesk.XmlRpcEndpointBehaviorElement, WsZendesk" />

但是这个:

<add name="xmlRpc"
             type="WsZendesk.XmlRpcEndpointBehaviorExtension, WsZendesk" />

对这个愚蠢的问题感到抱歉...... -_-