为什么我的WCF中收到的DocuSignEnvelopeInformation对象为null?

时间:2014-09-03 14:28:35

标签: wcf docusignapi

我正在尝试与DocuSign Connect服务集成。我已经设置了一个WCF服务来处理这个问题,但到目前为止还没有运气接收到DocuSignEnvelopeInformation对象。

我认为这与Mark Ba​​iley在12月发布的问题有关:Why is my WCF web service presenting this object in a different namespace with different field names?。但是正如您将在我的代码中看到的那样,我已经在界面中使用[XmlSerializerFormat]标记了DocuSignConnectUpdate方法。还有其他我想念的东西吗?

我的界面:

<ServiceContract(Namespace:="http://www.docusign.net/API/3.0")>
Public Interface IDSConnectService
    <OperationContract()>
    <XmlSerializerFormat()>
    Function DocuSignConnectUpdate(ByVal DocuSignEnvelopeInformation As DocuSignEnvelopeInformation)As String
End Interface

我的班级:

<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
<ServiceBehavior(AddressFilterMode:=AddressFilterMode.Any, Namespace:="http://www.docusign.net/API/3.0")>
Public Class DSConnectService
    Implements IDSConnectService

Public Function DocuSignConnectUpdate(ByVal DocuSignEnvelopeInformation As DocuSignEnvelopeInformation) As String Implements IDSConnectService.DocuSignConnectUpdate

    If Not DocuSignEnvelopeInformation Is Nothing Then
        ...........
        Return DocuSignEnvelopeInformation.EnvelopeStatus.EnvelopeID 
    Else
        Return "No Envelope Information Received"
    End If
End Function

DocuSignConnectUpdate始终返回&#34;未收到信封信息&#34;通过DocuSign Connect服务发布EnvelopeInformation时(但对我的本地测试客户端工作正常)。

我的web.config设置:

......
<system.serviceModel>
<services>
  <service name="MyService.DSConnectService" behaviorConfiguration="MyBehavior" >
    <endpoint address=""
              binding="basicHttpBinding"
              contract="MyService.IDSConnectService"/>
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="xmlEndpointBehavior">
      <webHttp helpEnabled="true" />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="MyBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="" closeTimeout="00:01:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
      textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"
      messageEncoding="Text">
      <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
</system.serviceModel>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

编辑: 以下是DocuSign和我的测试客户端发送的XML示例(我从Connect日志中复制了xml并在我的客户端请求中使用了它。)

<?xml version="1.0" encoding="UTF-8"?>
<DocuSignEnvelopeInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.docusign.net/API/3.0">
  <EnvelopeStatus>
    <RecipientStatuses>
      <RecipientStatus>
        <Type>Signer</Type>
        <Email>role99@email.com</Email>
        <UserName>Producer Name</UserName>
        <RoutingOrder>1</RoutingOrder>
        <Sent>2014-09-04T09:51:52.107</Sent>
        <Delivered>2014-09-04T09:55:26.62</Delivered>
        <Signed>2014-09-04T09:55:26.62</Signed>
        <DeclineReason xsi:nil="true"/>
        <Status>Completed</Status>
        <RecipientIPAddress>255.255.255.255</RecipientIPAddress>
        <ClientUserId>99</ClientUserId>
        <CustomFields/>
        <AccountStatus>Active</AccountStatus>
        <RecipientId>276567ad-763a-45e5-a5b2-38572dfa6bb8</RecipientId>
      </RecipientStatus>
    </RecipientStatuses>
    <TimeGenerated>2014-09-04T09:55:46.5725646</TimeGenerated>
    <EnvelopeID>01f83c1a-135f-438f-87cc-57ce74aba050</EnvelopeID>
    <Subject>Russell Test Signing your Application</Subject>
    <UserName>Russell Test</UserName>
    <Email>my@email.com</Email>
    <Status>Completed</Status>
    <Created>2014-09-04T09:51:51.793</Created>
    <Sent>2014-09-04T09:51:52.153</Sent>
    <Delivered>2014-09-04T09:55:26.683</Delivered>
    <Signed>2014-09-04T09:55:26.683</Signed>
    <Completed>2014-09-04T09:55:26.683</Completed>
    <ACStatus>Original</ACStatus>
    <ACStatusDate>2014-09-04T09:51:51.793</ACStatusDate>
    <ACHolder>Russell Test</ACHolder>
    <ACHolderEmail>my@email.com</ACHolderEmail>
    <ACHolderLocation>DocuSign</ACHolderLocation>
    <SigningLocation>Online</SigningLocation>
    <SenderIPAddress>255.255.255.255 </SenderIPAddress>
    <EnvelopePDFHash/>
    <CustomFields>
    </CustomFields>
    <AutoNavigation>true</AutoNavigation>
    <EnvelopeIdStamping>true</EnvelopeIdStamping>
    <AuthoritativeCopy>false</AuthoritativeCopy>
    <DocumentStatuses>
      <DocumentStatus>
        <ID>1</ID>
        <Name>TestForm1</Name>
        <TemplateName/>
        <Sequence>1</Sequence>
      </DocumentStatus>
      <DocumentStatus>
        <ID>2</ID>
        <Name>TestForm2</Name>
        <TemplateName/>
        <Sequence>2</Sequence>
      </DocumentStatus>
      <DocumentStatus>
        <ID>3</ID>
        <Name>TestForm3</Name>
        <TemplateName/>
        <Sequence>3</Sequence>
      </DocumentStatus>
      <DocumentStatus>
        <ID>4</ID>
        <Name>Signed-on-Paper_276567ad-763a-45e5-a5b2-38572dfa6bb8</Name>
        <TemplateName/>
        <Sequence>4</Sequence>
      </DocumentStatus>
    </DocumentStatuses>
  </EnvelopeStatus>
</DocuSignEnvelopeInformation>

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试以下装饰器,其中your_descriptor可以是所有服务的通用或更具体的。

的http:// your_domain替​​换/ your_descriptor&#34;)&GT; 公共接口IDSConnectService

[OperationContract(Action = "http://your_domain/your_descriptor/DocuSignConnectUpdate",
    ReplyAction = "http://your_domain/your_descriptor/DocuSignConnectUpdateResponse"
    )]
Function DocuSignConnectUpdate(ByVal DocuSignEnvelopeInformation As DocuSignEnvelopeInformation)As String

(没有装饰器或使用上面的命名空间) 公共类DSConnectService     实现IDSConnectService