SLSvcUtil генерирует RequestObject - PullRequest
0 голосов
/ 05 апреля 2011

Я недавно создал WCF-сервис и хотел бы использовать его с приложением Silverlight.Для этого я использовал SlSvcUtil (Silverlight 4) для создания необходимых клиентских классов.Но для каждого метода этот инструмент генерирует объект запроса, который имеет свойства для всех параметров, которые метод обычно принимает

public System.IAsyncResult BeginDepartmentGetAll(DepartmentGetAllRequest request,    System.AsyncCallback callback, object asyncState)
    {
        object[] _args = new object[1];
        _args[0] = request;
        System.IAsyncResult _result = base.BeginInvoke("DepartmentGetAll", _args, callback, asyncState);
        return _result;
    }

public System.IAsyncResult BeginDummy(DummyRequest request, System.AsyncCallback callback, object asyncState)
    {
        object[] _args = new object[1];
        _args[0] = request;
        System.IAsyncResult _result = base.BeginInvoke("Dummy", _args, callback, asyncState);
        return _result;
    }

Соответствующие классы запроса выглядят следующим образом:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName = "Dummy", WrapperNamespace ="http://example.com/Namespace", IsWrapped = true)]
public partial class DummyRequest

{

[System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://example.com/Namespace", Order = 0)]
public string s;

public DummyRequest()
{
}

public DummyRequest(string s)
{
    this.s = s;
}

}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName = "DepartmentGetAll", WrapperNamespace = "http://example.com/Namespace", IsWrapped = true)]
public partial class DepartmentGetAllRequest
{
   public DepartmentGetAllRequest()
   {
   }
}

В аналогичном проекте WCF эти методы принимают простые параметры метода веб-службы без использования объекта запроса.Как я могу генерировать сервисные методы без этих объектов запроса?

1 Ответ

0 голосов
/ 26 марта 2012

Хорошо, мне наконец-то удалось разгадать загадку:

Может ли slsvcutil генерировать эти загадочные объекты запроса или нет, зависит от ServiceContractAttribute.

Если вы установите:

[ServiceContract]
public interface MyService {
    [OperationContract]
    void MyMethod(Guid id);
}

соответствующий метод клиента выглядит следующим образом:

service.BeginMyMethod(id);

Но если вы установите:

[ServiceContract(Namespace = "http://example.com/MyService")]
public interface MyService {
    [OperationContract]
    void MyMethod(Guid id);
}

, он будет выглядеть так:

service.BeginMyMethod(new MyMethodRequest(id));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...