У меня есть очень простой службы WCF работает на сервере Sharepoint, который имеет ServiceContract
, который выглядит примерно так:Переходя перечисление к способу в службе
[ServiceContract]
interface iSPTest
{
[OperationContract]
Stream Process(Stream input);
}
Это прекрасно работает, и я могу используйте svcutil
для создания прокси-сервера и файла конфигурации. Тем не менее, я хотел бы изменить его, чтобы принять перечисление:
[OperationContract]
Stream Process(Stream input, MyEnumType foo);
с enum
определенными:
[DataContract]
public enum MyEnumType
{
[EnumMember]
Default = 0,
[EnumMember]
Foo,
[EnumMember]
Bar
};
Однако, когда я делаю это, я больше не могу получить прокси-сервер для генерации. Я получаю сообщение об ошибке:
Metadata contains a reference that cannot be resolved: 'http://myserver/_vti_
bin/SPTest/SPTest.svc'.
The requested service, 'http://myserver/_vti_bin/SPTest/SPTest.svc' could not
be activated. See the server's diagnostic trace logs for more information.
Кажется, что это должно быть просто. Я попытался добавить ServiceKnownType
в ServiceContract
, но это, похоже, не помогло. Почему кажется, что невозможно выбрать тип перечисления? Для бонусных очков можно ли использовать существующее перечисление в сборке, которое сервер ссылается, но клиент не делает этого? Потому что в этом случае невозможно было бы отметить enum
DataContract
?
Хорошо, это звучит правильно. Поиск еще немного: http://cm-bloggers.blogspot.com/2011/06/wcf-pattern-passing-additional-data-to.html выглядит как правильный подход. –
Интересно, что при использовании контракта с пользовательским сообщением 'MySteam' это не сработает, если бы у меня был« Stream Process (вход в MySteam) », он должен был быть« MySteam Process (вход в MySteam) », а прокси настаивал на создании метода с сигнатурой 'void Process (ref myEnum foo, ref Stream input);' –