WCF Передача сложного типа без общих типов dll - PullRequest
0 голосов
/ 10 декабря 2010

Я пытаюсь разобраться с WCF, и в моем примере приложения требуется передать класс между моим веб-сайтом и моим новым сервисом WCF.

У меня нет общих типов dll, поэтомукак передать объект через службу?

Мой код выглядит примерно так:

Веб-сайт

namespace HRO_Proof

{

[DataContract(Name = "ThrowAway", Namespace = "http://schemas.proof.com/throwaway/")]
[KnownType(typeof(ThrowAway))]
public class ThrowAway
{
    public Int32 MyValue { get; set; }

    public Boolean SomeFunc()
    {
        return true;
    }
}

}

Служба WCF

namespace HRO_ServiceLibarary

{

public class StateService : IStateService
{
    public Int32 SaveThrowaway(object throwAway)
    {
        //Save to DB
        return 0; //Id of inserted record
    }

}

}

Я немного читал о DataContractResolver, но я не уверен, как я могу это реализовать.

Любая помощь направления будет приветствоваться.

Спасибо, Майк

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

1) [KnownType(typeof(ThrowAway))]: атрибут KnownType, имеющий тот же тип, что и сам класс, является бесполезным и принудительно применяется.Вам это не нужно.

2) Параметр типа объекта почти никогда не должен использоваться по разным причинам.На самом деле вам нужен [KnownType (typeof (ThrowAway))] для класса object, но, очевидно, вы не являетесь владельцем этого класса.Так что получите лучшую абстракцию.

3) Как сказал Динеш, вам нужно [DataMember] для public Int32 MyValue { get; set; }.

4) Если вы используете генерацию кода путем добавления ссылки на сервис, ваши методыоставайтесь на сервере и никогда не оставляйте его.Но если вы распространяете свои сущности (ThrowAway) своему клиенту, то они будут, и это хорошая практика.Помните!Отдельный интерфейс, сущности и реализация каждого в отдельную DLL.

0 голосов
/ 10 декабря 2010

В классе пометьте каждого члена DataMember. Функции нельзя пометить как DataMember.

[DataContract]
public class ThrowAway
{
    [DataMember]
    public Int32 MyValue { get; set; }
}

В эксплуатации

public class StateService : IStateService
{
    public Int32 SaveThrowaway(ThrowAway throwAway)
    {
        //Save to DB
        return 0; //Id of inserted record
    }

}

Теперь, если вы хотите использовать эту службу на своем веб-сайте, добавьте ссылку на службу, и вы должны получить класс ThrowAway в прокси-классе

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