2010-10-19 4 views
1

Ошибка при попытке вызвать webserviceСсылка на объект не установлена ​​в экземпляр объекта. ??? в мыле?

"System.NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта." Ошибка на этой линии

if (Authentication.Username == "x" && 
      Authentication.Password == "y") 

Что это значит?


[WebService(Namespace = "https://domain.com")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class Testing : System.Web.Services.WebService 
{ 
    public TestAuthHeader Authentication; 
    public class TestAuthHeader : SoapHeader 
    { 
     public string Username; 
     public string Password; 
    } 

    [WebMethod] 
    [SoapHeader("Authentication")] 
    public string TestService() 
    { 
     if (Authentication.Username == "x" && 
      Authentication.Password == "y") 
     { 
      return "OK"; 
     } 
     else 
     { 
      return "Access Denided"; 
     } 
    } 
} 
+0

Поле Provaly 'Authentication' равно null. Но приятная вещь об исключениях в C# заключается в том, что они сообщают вам точный номер строки отказа. В какой строке это подразумевается? –

+0

Как вы звоните на службу? Можете ли вы опубликовать этот код? –

+0

@kirk, ошибка в этой строке "if (Authentication.Username ==" x "&& Authentication.Password ==" y ")" – 001

ответ

0

Попробуйте переместить определение класса TestAuthHeader снаружи самого веб-службы ...

Кроме того, попробуйте протестировать неизвестные заголовки, чтобы увидеть, если Authentication заканчивается там ...

[WebMethod] 
[SoapHeader("Authentication")] 
[SoapHeader("unknownHeaders",Required=false)] 
public string TestService() 
{ 
    foreach (SoapUnknownHeader header in unknownHeaders) { 
     // Test header 
     Debug.Write(header.Element.Name); 
    } 
} 

Кроме что, можно ли увидеть код, в котором вы звоните в веб-службу?

* Редактировать *

Если вы что-либо на стороне клиента для создания экземпляра TestAuthHeader и установить его свойства не делать, вы будете иметь нулевую ссылку на стороне службы. Из примера MSDN использования SoapHeaders (клиентский код):

MyHeader mySoapHeader = new MyHeader(); 

// Populate the values of the SOAP header. 
mySoapHeader.Username = Username; 
mySoapHeader.Password = SecurelyStoredPassword; 

// Create a new instance of the proxy class. 
MyWebService proxy = new MyWebService(); 

// Add the MyHeader SOAP header to the SOAP request. 
proxy.MyHeaderValue = mySoapHeader; 

// Call the method on the proxy class that communicates with 
// your Web service method. 
string results = proxy.MyWebMethod(); 


Все, что вам действительно нужно:

public string TestService() 
{ 
    if (Authentication == null) { 
     return "Access is denied"; 
    } 

    // ... the rest of your code 

Это будет обрабатывать сценарий, когда клиент не установлен объект аутентификации ,

+0

просто используя страницу asm по умолчанию, чтобы сделать запрос, я ожидал, что ответ будет «Access Denied» – 001

+0

, пожалуйста, просмотрите http://stackoverflow.com/questions/22781969/adding-parameters-to-soap-request- используя-ksoap2-андроид – Braj

0

Я просто угадать, но в методе TestService экземпляр Authentication вероятно нуль, что дает вам это исключение. Может быть, у вас нет аутентификации для сайта?

+0

Извините, но что это значит? Мне нужно включить проверку подлинности? Установите web.config, чтобы включить его? Иначе это не сработает? – 001

Смежные вопросы