Я написал основной веб-сервис. Этот веб-сервис обрабатывает все вычисления, операции с данными и т. Д.
Этот веб-сервис находится в том же решении, что и мой микросервис.
Мой микросервис должен связаться с моим основным веб-сервисом и вернуть объект, полученный от основного веб-сервиса. Проблема в том, что он не будет работать, так как, когда я запускаю свое решение, он не может перевести эталонный объект для контракта данных.
Исключение на тестовом клиенте 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...
}
Итак, подведем итог:
- На COREservice ссылается на сервисную ссылку на MICROservice
- COREservice возвращает объект, который должен быть возвращен MICROservice
- MICROservice зависит от COREservice
Ошибка CS0644, потому что он, вероятно, не может получить полный класс из COREservice
Возможно ли это решить, как я ссылаюсь на COREservice? или есть другое решение, которое я пропустил?