2017-03-29 4 views
0

Ich habe eine Service-Referenz von Visual Studio 2015 erstellt. Die Kommunikation funktioniert gut, aber ich muss Anwendung frei von app.config-Datei erhalten. Ich habe versucht, eine eigene Bindung und einen Endpunkt zu erstellen, aber tatsächlich erhalte ich SystemNullReference.SystemNullReference beim Verbinden mit WebService

Probe von meinem Code:

var binding = CreateBinding(); 
    var endpoint = new EndpointAddress("http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx"); 
    var Client = new Testowy.Emailver.EmailVerNoTestEmailSoapClient(binding, endpoint); 

private static BasicHttpBinding CreateBinding() 
     { 
      var binding = new BasicHttpBinding(); 
      binding.Name = "EmailVerNoTestEmailSoap"; 
      binding.CloseTimeout = TimeSpan.FromMinutes(1); 
      binding.OpenTimeout = TimeSpan.FromMinutes(1); 
      binding.ReceiveTimeout = TimeSpan.FromMinutes(10); 
      binding.SendTimeout = TimeSpan.FromMinutes(1); 
      binding.AllowCookies = false; 
      binding.BypassProxyOnLocal = false; 
      binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; 
      binding.MaxBufferSize = 65536; 
      binding.MaxBufferPoolSize = 524288; 
      binding.MessageEncoding = WSMessageEncoding.Text; 
      binding.TextEncoding = System.Text.Encoding.UTF8; 
      binding.TransferMode = TransferMode.Buffered; 
      binding.UseDefaultWebProxy = true; 

      binding.ReaderQuotas.MaxDepth = 32; 
      binding.ReaderQuotas.MaxStringContentLength = 8192; 
      binding.ReaderQuotas.MaxArrayLength = 16384; 
      binding.ReaderQuotas.MaxBytesPerRead = 4096; 
      binding.ReaderQuotas.MaxNameTableCharCount = 16384; 

      binding.Security.Mode = BasicHttpSecurityMode.None; 
      binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
      binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None; 
      binding.Security.Transport.Realm = ""; 
      binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName; 
      binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default; 
      return binding; 
     } 

System.NullReferenceException: Objektverweis nicht auf eine Instanz gesetzt eines Objekts.

Server Stapelüberwachung: w System.ServiceModel.Security.IssuanceTokenProviderBase 1.DoNegotiation(TimeSpan timeout) w System.ServiceModel.Security.SspiNegotiationTokenProvider.OnOpen(TimeSpan timeout) w System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) w System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open(TimeSpan timeout) w System.ServiceModel.Security.SymmetricSecurityProtocol.OnOpen(TimeSpan timeout) w System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) w System.ServiceModel.Channels.SecurityChannelFactory 1.ClientSecurityChannel 1.OnOpen(TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) w System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout) w System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout) w System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout) w System.ServiceModel.Security.SecuritySessionClientSettings 1.ClientSecuritySessionChannel.OnOpen (Timespan timeout) w System.ServiceModel.Channels.CommunicationObject.Open (Timespan timeout) w System.ServiceModel.Channels.ServiceChannel.OnOpen (Timespan timeout)
w System.ServiceModel.Channels.CommunicationObject.Open (Timespan timeout) w System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel. ICallOnce.Call (ServiceChannel -Kanal, Span timeout) w System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (Timespan Timeout, CallOnceManager Kaskade) w System.ServiceModel.Channels.ServiceChannel.EnsureOpened (Timespan timeout) w System.ServiceModel.Channels. ServiceChannel.Call (String Aktion, Boolean Einwege, ProxyOperationRuntime Betrieb Object [] ins, Object [] outs, Span timeout) w System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage method, ProxyOperationRuntime Betrieb) w Systems .ServiceModel.Channels.ServiceChannelProxy.Invoke (IMessage Nachricht)

[0] 210

Ausnahme erneut ausgelöst bei: w System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) w System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (Message & MsgData, Int32 Typ) w WebServices.Testowy.Emailver.EmailVerNoTestEmailSoap.AdvancedVerifyEmail (String email, Int32 Timeout, String LicenseKey) w WebServices.Test.GetWebService() w C: \ Benutzer \ michal.warchulinski \ Source \ Repos \ Aplixcom_CommonComponents \ Aplixcom_CommonComponents \ WebServices \ ClientClasses.cs: wiersz 65 w App.Main() w C: \ Benutzer \ michal.warchulinski \ Documents \ Visual Studio 2015 \ Projekte \ Soap \ Soap \ Program.cs: wiers z 22

Entschuldigen Sie eine Menge Text. Irgendwelche Hinweise, was diese Ausnahme bieten kann?

+0

Haben Sie den Debugger eingeschaltet und gesehen, welches Bit es nicht mag? Hast du gesehen, welche Zeile genau die Ausnahme auslöst? –

+0

Rufen Sie Client.Open() vor dem Aufrufen der Webservice-Methode auf? –

+0

@ChrisWatts Der Code, der diese Methode aufruft, befindet sich in einer anderen Lösung. Es scheint, dass Ausnahme in geworfen wird "var Client = new Testowy.Emailver.EmailVeroNoTestEmailSoapClient (Bindung, Endpunkt);" Aber wie ich gerade überprüft habe, wenn Projekt in der gleichen Lösung ist, funktioniert alles gut. – warkocz

Antwort

0

Versuchen Sie, die Methode Open auf dem Client aufzurufen, bevor Sie die Webservice-Methode aufrufen. Manchmal hilft es, einige Probleme mit der Initialisierung von Objekten zu lösen.

Wir können basierend auf Ihrem Stack-Trace sehen, dass es tatsächlich versucht hat, den Client zu öffnen, als Sie die Webservice-Methode aufgerufen haben. Aber anscheinend hat es versucht, den Kanal auf eine andere Weise zu öffnen als die Open Methode.

Leider habe ich nicht das Wissen zu erklären, warum der offene Anruf manchmal benötigt wird und manchmal nicht.

Ich wäre froh, wenn jemand das auch erklären könnte.

Verwandte Themen