Я создал веб-сервис REST, который мне нужно использовать из приложения asp.net. Служба размещается из окна консоли. Я могу заставить его работать нормально, и я могу получить вывод от него, а также при серфинге к нему в веб-браузере. Проблема в том, что когда я пытаюсь «добавить ссылку на службу» из моего приложения asp.net, он жалуется на различные вещи, в зависимости от того, на какой URL службы я на него указываю. Конечный результат - я не могу понять, как добавить ссылку на сервис.
Мой интерфейс определен так:
[ServiceContract]
public interface IWave {
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/devices")]
List<Device> getDevices();
...
}
Вот как я размещаю свой сервис:
// Port is 1178
var endPoint = new EndpointAddress(string.Format("http://localhost:{0}/wave", port));
var waveServiceSingleton = new WaveSVC();
binding = new WebHttpBinding();
var behavior = new WebHttpBehavior();
behavior.FaultExceptionEnabled = true;
host = new WebServiceHost(waveServiceSingleton, endPoint.Uri);
// Get the service debug behavior and tell it to include details about errors
ServiceDebugBehavior sdb;
sdb = host.Description.Behaviors.Find<ServiceDebugBehavior>();
sdb.IncludeExceptionDetailInFaults = true;
host.AddServiceEndpoint(typeof(IWave), binding, "");
// Add mex endpoint
ServiceMetadataBehavior mexBehavior = new ServiceMetadataBehavior();
mexBehavior.HttpGetEnabled = true;
host.Description.Behaviors.Add(mexBehavior);
host.AddServiceEndpoint(typeof(IWave), MetadataExchangeBindings.CreateMexHttpBinding(), endPoint.Uri.AbsoluteUri + "/mex");
host.Open();
Когда я просматриваю http://localhost:1180/wave/devices,, я вижу строку json в теле моего браузера. Это ожидается и работает как хотелось бы. Я не могу указать свой мастер «Добавить ссылку на службу» на этот URL, так как он жалуется, что:
The document at the url http://localhost:1178/wave/devices was not recognized as a known document type.
The error message from each known type may help you fix the problem:
- Report from 'XML Schema' is 'Data at the root level is invalid. Line 1, position 1.'.
- Report from 'DISCO Document' is 'Data at the root level is invalid. Line 1, position 1.'.
- Report from 'WSDL Document' is 'There is an error in XML document (1, 1).'.
- Data at the root level is invalid. Line 1, position 1.
Metadata contains a reference that cannot be resolved: 'http://localhost:1178/wave/devices'.
The remote server returned an unexpected response: (405) Method Not Allowed.
The remote server returned an error: (405) Method Not Allowed.
If the service is defined in the current solution, try building the solution and adding the service reference again.
У меня есть неприятное подозрение, что мне нужно указать свою «Добавить ссылку на службу» на mex, но это тоже не работает, и действительно, когда я перехожу по адресу mex http://localhost:1178/wave/mex,, я получаю пустая страница.
РЕДАКТИРОВАТЬ 1
Просто чтобы устранить виновника JSON, я изменил свой контракт на вывод Xml вместо Json. Результат был таким же: я не могу добавить ссылку на службу, используя этот URL: http://localhost:1178/zwave/devices/xml (хотя этот URL создает XML).
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate= "/devices/xml")]
Заранее благодарим за предоставленную помощь.