Я пытаюсь использовать веб-сервисы в Unity. Я сделал прокси-класс моего веб-сервиса, используя svcutil. Прокси-класс очень длинный, я просто опубликую здесь метод, который я вызываю в моем C #-скрипте.
В моем прокси-классе у меня есть:
public bool LoginClic(string szUserName, string szPassword)
{
LoginClicRequest inValue = new LoginClicRequest();
inValue.Body = new LoginClicRequestBody();
inValue.Body.szUserName = szUserName;
inValue.Body.szPassword = szPassword;
LoginClicResponse retVal = ((UserServiceSoap)(this)).LoginClic(inValue);
return retVal.Body.LoginClicResult;
}
Мой C # скрипт выглядит так и активируется, когда пользователь нажимает кнопку на Unity
public class LoginButton : MonoBehaviour
{
public GameObject login;
public GameObject password;
private InputField loginField;
private InputField passwordField;
// Use this for initialization
void Start ()
{
loginField = login.GetComponent<InputField>();
passwordField = password.GetComponent<InputField>();
}
public void PressLogin()
{
string szLogin, szPassword;
szLogin = loginField.text;
szPassword = passwordField.text;
UserServiceSoapClient user = new UserServiceSoapClient(new BasicHttpBinding(),
new EndpointAddress("http://localhost/WebService/UserService.asmx"));
if (user.LoginClic(szLogin, szPassword))
{
Debug.Log("Sucess");
}
else
{
Debug.Log("Failure");
}
}
}
Дело в том, что когда я использую эту кнопку, я получаю исключение, которое говорит:
InvalidOperationException: Operation 'LoginClicAsync' contains a message with parameters. Strongly-typed or untyped message can be paired only with strongly-typed, untyped or void message.
System.ServiceModel.Dispatcher.OperationFormatter.Validate (System.ServiceModel.Description.OperationDescription od, System.Boolean isRpc,
System.Boolean isEncoded) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.Dispatcher.OperationFormatter..ctor (System.ServiceModel.Description.OperationDescription od, System.Boolean isRpc,
System.Boolean isEncoded) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.Description.ContractDescription.PopulateClientOperation (System.ServiceModel.Dispatcher.ClientRuntime proxy,
System.ServiceModel.Description.OperationDescription od, System.Boolean isCallback) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.Description.ContractDescription.FillClientOperations (System.ServiceModel.Dispatcher.ClientRuntime proxy, System.Boolean isCallback) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.Description.ContractDescription.CreateClientRuntime (System.Object callbackDispatchRuntime) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.Description.ServiceEndpoint.CreateClientRuntime (System.Object callbackDispatchRuntime) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.MonoInternal.ClientRuntimeChannel..ctor (System.ServiceModel.Description.ServiceEndpoint endpoint,
System.ServiceModel.ChannelFactory channelFactory,
System.ServiceModel.EndpointAddress remoteAddress, System.Uri via) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.ChannelFactory`1[TChannel].CreateChannel (System.ServiceModel.EndpointAddress address, System.Uri via) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.ChannelFactory`1[TChannel].CreateChannel (System.ServiceModel.EndpointAddress address) (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.ChannelFactory`1[TChannel].CreateChannel () (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.ClientBase`1[TChannel].CreateChannel () (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.ClientBase`1[TChannel].get_InnerChannel () (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
System.ServiceModel.ClientBase`1[TChannel].get_Channel () (at <40d7d6933b0c4e6f97e3ac69c092efd6>:0)
UserServiceSoapClient.UserServiceSoap.LoginClic (LoginClicRequest request) (at Assets/Script/WebService/UserService.cs:238)
UserServiceSoapClient.LoginClic (System.String szUserName, System.String szPassword) (at Assets/Script/WebService/UserService.cs:247)
LoginButton.PressLogin () (at Assets/Script/Login/LoginButton.cs:32)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler,
UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData,
UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
Поскольку прокси-класс создан, я чувствую, что не должен его трогать, поэтому мне было интересно, что плохого я сделал, что могло вызвать это? Мой метод принимает 2 строки в качестве параметра и возвращает логическое значение.
Я не уверен, что это будет очень полезно, но вот как этот метод выглядит в WSDL:
<s:element name="LoginClic">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="szUserName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="szPassword" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="LoginClicResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="LoginClicResult" type="s:boolean"/>
</s:sequence>
</s:complexType>
</s:element>
Большое спасибо за помощь и хорошего дня.
РЕДАКТИРОВАТЬ 1: После нескольких часов исследований я чувствую, что у меня могут быть те же проблемы, что и у этих парней: https://github.com/dotnet/wcf/issues/1808, но они так и не нашли, как это исправить.