2017-01-11 1 views
0

Я создал ссылку службы WCF из предоставленного WSDL-файла. в C# я создал экземпляр клиента прокси с основным обязательным и называется нужный метод:Ошибка вызова веб-службы

public static bool main() 
    { 
     Debugger.Launch(); 
     var binding = new BasicHttpsBinding(); 

     binding.Security.Mode = BasicHttpsSecurityMode.Transport; 
     binding.TextEncoding = System.Text.Encoding.UTF8; 

     var remoteAddress = new System.ServiceModel.EndpointAddress("https://tester.mysite.de:8443/webservice/OrderNumber"); 

     using (var orderNumberClient = new orderNumberClient(new System.ServiceModel.BasicHttpBinding(BasicHttpSecurityMode.Transport), remoteAddress)) 
     { 
      string IDSystem = "123"; 
      string IDOSystem = "abc"; 

      //set timeout 
      orderNumberClient.Endpoint.Binding.SendTimeout = new TimeSpan(0, 0, 0, 10000); 
      orderNumberClient.ClientCredentials.UserName.UserName = "test"; 
      orderNumberClient.ClientCredentials.UserName.Password = "test"; 

      //call web service method 
      string productResponse = orderNumberClient.getNewOrderNumber(IDSystem, "01", IDOSystem); ; 

      MessageBox.Show(productResponse); 
     } 

     return true; 
    } 

К сожалению, я получаю довольно бесполезный ошибку, когда я называю метод «getNewOrderNumber»:

System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.ServiceModel.FaultException: WebService обработка исключений

стек сервера трассировки:

Bei System.ServiceModel.Channels.ServiceChannel.HandleReply (ProxyOperationRuntime операции, ProxyRpc & RPC)

bei System.ServiceModel.Channels.ServiceChannel.Call (String action, Boolean oneway, ProxyOperationRuntime operation, Object [] ins, Объект [] аутов, тайм-аут TimeSpan)

бей System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция ProxyOperationRuntime)

...

Это не ошибка на стороне веб-службы, как отлично работает в SoapUI, я, возможно, что-то не хватает в привязке?

Надеюсь, что кто-то, кто более осведомлен о веб-сервисах, может осветить основную причину.

+0

Я согласен, что это довольно расплывчатое исключение. Я считаю, что этот конкретный должен иметь внутреннее исключение, которое будет более полезным. Примечание. Он может быть вложен в несколько слоев. Продолжайте проверять свои Внутренние Исключения, пока у вас их больше нет. – Vahlkron

+0

Во внутреннем исключении ничего не было видно :(к счастью, я узнал от клиента, что у меня отсутствует необходимый заголовок! Я отправлю ответ. –

ответ

0

Оказалось, что я не отправлял заголовок «Авторизация» с вызовом. Для преодоления проблемы я использовал класс OperationContextScope для добавления необходимого HttpRequestMessageProperty к прокси экземпляров внутреннего канала перед началом реальной веб-службы вызова метода:

   using (OperationContextScope scope = new OperationContextScope(orderNumberClient.InnerChannel)) 
       { 
        var httpRequestProperty = new HttpRequestMessageProperty(); 
        httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + 
        Convert.ToBase64String(Encoding.ASCII.GetBytes(orderNumberClient.ClientCredentials.UserName.UserName + ":" + 
        orderNumberClient.ClientCredentials.UserName.Password)); 
        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; 

        string Response = orderNumberClient.getNewOrderNumber(IDSystem, "01", IDOSystem); 
       } 
Смежные вопросы