Возврат ссылки на объект службы в WCF - PullRequest
4 голосов
/ 18 марта 2019

Я написал основной веб-сервис. Этот веб-сервис обрабатывает все вычисления, операции с данными и т. Д.

Этот веб-сервис находится в том же решении, что и мой микросервис.

Мой микросервис должен связаться с моим основным веб-сервисом и вернуть объект, полученный от основного веб-сервиса. Проблема в том, что он не будет работать, так как, когда я запускаю свое решение, он не может перевести эталонный объект для контракта данных.

Исключение на тестовом клиенте WCF:

ошибка CS0644: 'System.ComponentModel.PropertyChangedEventHandler' не может быть производным от специального класса 'System.MulticastDelegate'

Когда я добавил COREservice в качестве ссылки, он автоматически генерировал классы, которые реализовали INotifyPropertyChanged.

Теперь я, конечно, мог бы написать обширные конвертеры, которые бы конвертировали все объекты, полученные от основного веб-сервера, в объекты с тем же именем, но локально определенными, только это было бы много работы, и я сомневаюсь, что нет другой более быстрый / более элегантный способ решения этой проблемы.


IService:

    [OperationContractAttribute(AsyncPattern = true)]
    IAsyncResult BeginOperation(string Salesperson, decimal Timestamp, AsyncCallback asyncCallback, object state);
    CoreWebservice.ReturnObj EndOperation (IAsyncResult result);

Услуги:

public CoreWebservice.ReturnObj Operation(string Salesperson = null, decimal? Timestamp = null, OperationContext opContext = null)
{
    CoreWebservice.ReturnObj result = CoreService.Operation(Salesperson, Timestamp ?? default(decimal));

    return result;
}

Конечная точка:

<client>
  <endpoint address="http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_M3ApiCalls"
    contract="COREservice.ApiCalls" name="BasicHttpBinding_M3ApiCalls" />
</client>

Все классы или "Resultobjects" написаны одинаково (в паре с результатом и классом recordresult)

[Serializable()]
[DataContract]
[XmlSerializerFormat()]
[XmlRoot(ElementName = "CRS100MI_List",DataType = "System.Xml.XmlElement",Namespace = "http://www.the.namespace/of/company")]
public class CRS100MI_ListResult
{
    [DataMember]
    [System.Xml.Serialization.XmlElement(Order = 0)]
    public string Result = "";

    //etc....

    [DataMember]
    [System.Xml.Serialization.XmlElementAttribute(Order = 3)]
    public List<CRS100MI_ListRecordResult> Record = new List<CRS100MI_ListRecordResult>();



    public CRS100MI_ListResult Parse(List<Dictionary<string, string>> list)
    {
        //parse a list of dictionaries to fill the fields of the 
        //recordresult, and return the entire object populated with records.

        return this;
    }
}

[Serializable()]
[DataContract(Namespace = "http://www.rexel.nl/M3/ApiCalls")]
[XmlSerializerFormat()]
[XmlRoot(ElementName = "CRS100MI_ListRecord", DataType = "System.Xml.XmlElement", Namespace = "http://www.the.namespace/of/company")]
public class CRS100MI_ListRecordResult
{


    [DataMember]
    [System.Xml.Serialization.XmlElementAttribute(Order = 0)]
    public string Result               { get; set; }

    [DataMember]
    [System.Xml.Serialization.XmlElementAttribute(Order = 1)]
    public string ErrorMessage         { get; set; }

    [DataMember]
    [System.Xml.Serialization.XmlElementAttribute(Order = 2)]
    public List<string> Messages           { get; set; }

    //etc...

}

Итак, подведем итог:

  1. На COREservice ссылается на сервисную ссылку на MICROservice
  2. COREservice возвращает объект, который должен быть возвращен MICROservice
  3. MICROservice зависит от COREservice
  4. Ошибка CS0644, потому что он, вероятно, не может получить полный класс из COREservice

    Возможно ли это решить, как я ссылаюсь на COREservice? или есть другое решение, которое я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...