2016-05-05 10 views
0

Wir haben implementieren DocuSign api in unsere Anwendung und es funktioniert gut in der Entwicklung und bei einem unserer Produktionsserver, sondern auf bestimmte Produktionsserver senden versagt es, wenn die folgende ZeileDocuSign .net enevlope Ausgabe auf einem Server

läuft

var scope = new OperationContextScope (client.InnerChannel);

die Ausnahme ausgelöst wird

Fehler: InvalidDataContractException: Nachricht: Geben Sie 'System.Threading.Tasks.Task`1 [DocuSign.DocuSignWeb.SetSharedAccessResult]' kann nicht serialisiert werden. Erwägen Sie, es mit dem DataContractAttribute-Attribut zu markieren, und markieren Sie alle seine Member, die mit dem DataMemberAttribute-Attribut serialisiert werden sollen. Wenn es sich bei dem Typ um eine Sammlung handelt, sollten Sie diese mit CollectionDataContractAttribute markieren. Weitere unterstützte Typen finden Sie in der Microsoft .NET Framework-Dokumentation.

Dies ist die komplette Methode, die

public DocuSignResponse SendEnvelope(Envelope envelope, string templateGUID) 
    { 
     var response = new DocuSignResponse(); 

     var client = new DSAPIServiceSoapClient("DSAPIServiceSoap", URL); 
     try 
     { 
      var scope = new OperationContextScope(client.InnerChannel); 
      { 
       HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty(); 
       httpRequestProperty.Headers.Add("X-DocuSign-Authentication", AuthHeader); 
       OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; 

       if (client.InnerChannel.State != System.ServiceModel.CommunicationState.Faulted) 
       { 
        // call service - everything's fine 
       } 
       else 
       { 
        // channel faulted - re-create your client and then try again 
        response.Success = false; 
        response.ErrorMessage = "Channel has faulted!!"; 
        return response; 
       } 

       client.Open(); 

       EnvelopeStatus envelopeStatus; 
       if (!string.IsNullOrEmpty(templateGUID)) 
       { 
        DocuSignWeb.EnvelopeInformation envelopeInfo = new DocuSignWeb.EnvelopeInformation(); 
        envelopeInfo.AccountId = AccountId; 
        envelopeInfo.EmailBlurb = envelope.EmailBlurb; 
        envelopeInfo.Subject = envelope.Subject; 

        // Configure the inline templates 
        DocuSignWeb.InlineTemplate inlineTemplate = new DocuSignWeb.InlineTemplate(); 
        inlineTemplate.Sequence = "1"; 
        inlineTemplate.Envelope = new DocuSignWeb.Envelope(); 
        inlineTemplate.Envelope.Recipients = envelope.Recipients; 
        inlineTemplate.Envelope.AccountId = AccountId; 

        DocuSignWeb.CompositeTemplate template = new DocuSignWeb.CompositeTemplate(); 
        template.InlineTemplates = new DocuSignWeb.InlineTemplate[] {inlineTemplate}; 

        DocuSignWeb.ServerTemplate serverTemplate = new DocuSignWeb.ServerTemplate(); 
        serverTemplate.Sequence = "1"; 
        serverTemplate.TemplateID = templateGUID; 

        template.ServerTemplates = new[] {serverTemplate}; 
        template.Document = envelope.Documents[0]; 

        envelopeStatus = client.CreateEnvelopeFromTemplatesAndForms(envelopeInfo, new[] {template}, true); 
       } 
       else 
       { 
        envelopeStatus = client.CreateAndSendEnvelope(envelope); 
       } 

       // An envelope ID indicates that it succeeded 
       response.Success = true; 
       response.ResponseRef = envelopeStatus.EnvelopeID; 

       // No point doing this, as it wouldn't have been signed 
       // Request the status of that envelope       
       // response.Status = client.RequestStatus(envelopeStatus.EnvelopeID); 

       // Used if embed option being used 
       response.Envelope = envelope; 
       response.Status = envelopeStatus; 


       if (client.State != CommunicationState.Faulted) 
       { 
        client.Close(); 
       } 
       else 
       { 
        client.Abort(); 
       } 
      } 
     } 
     catch (InvalidDataContractException err) 
     {    
      err.LogError(); 

      response.Success = false; 

      response.ErrorMessage = string.Format("InvalidDataContractException: Message: {0} StackTrace: {1} AuthHeader: {2}", err.Message, err.StackTrace, AuthHeader); 
     } 
     catch (CommunicationException err) 
     { 
      err.LogError();     
      response.Success = false; 
      response.ErrorMessage = string.Format("CommunicationException: Message: {0} StackTrace: {1}", err.Message, err.StackTrace); 

      client.Abort(); 
     } 
     catch (TimeoutException err) 
     { 
      err.LogError(); 

      response.Success = false; 
      response.ErrorMessage = string.Format("TimeoutException: Message: {0} StackTrace: {1}", err.Message, err.StackTrace); 

      client.Abort(); 
     } 
     catch (Exception err) 
     { 
      err.LogError(); 

      response.Success = false; 
      response.ErrorMessage = string.Format("Exception: Message: {0} StackTrace: {1}", err.Message, err.StackTrace); 

      client.Abort();     
     } 
     finally 
     { 
      client = null; 
     } 

     return response; 
    } 

Im Moment mit einem Verlust, was das Problem ist, da ich bin der gleiche Code und Datenbank arbeitet auf einem anderen Rechner aufgerufen wird, so derzeit Denken es ist umweltfreundlich.

Jede Hilfe sehr geschätzt.

+0

Ausgehend von der Fehlermeldung, klingt wie ein Knoten in der Nachricht nicht serialisiert werden. Ich würde alle Werte in der Nachricht, die den Fehler verursacht, sorgfältig untersuchen. Irgendwelche Felder mit seltsamen Werten? Initialisierte, aber nicht ausgewählte Unterobjekte? Viel Glück. –

+0

Danke dafür. Das Problem besteht darin, dass der Fehler beim Aufruf des OperationContextScope auftritt, der zuvor sehr wenig Code gesetzt hat. Wenn es ein Code Initialisierungsproblem wäre, würde ich erwarten, dass dieses Problem lokal und auf dem anderen Server auftritt, der funktioniert. –

+0

Nun, ich habe gerade den gleichen Code ausprobiert, und es funktioniert jetzt, also keine Ahnung, warum es scheiterte, aber jetzt funktioniert. Es scheint, der Server hat gerade einige Windows-Updates installiert, so dass damit zu tun haben könnte. –

Antwort

0

Sieht so aus, als wären dies Serverprobleme auf DocuSign-Seite. Gelegentlich treten Bugs und andere Probleme auf, die in der DocuSign-Demo-Sandbox-Umgebung zurückgesetzt werden.