Я нашел свой ответ, следуя примеру, похоже, что мой app.config полностью отсутствует среди нескольких других вещей.
https://www.codeproject.com/Tips/1009004/WCF-RESTful-on-Windows-Service-Host
В моем приложении Windows есть следующее:
protected override void OnStart(string[] args)
{
if (m_svcHost != null)
m_svcHost.Close();
string strAdrHTTP = "http://localhost:9001/CalcService";
//string strAdrTCP = "net.tcp://localhost:9002/CalcService";
Uri[] adrbase = { new Uri(strAdrHTTP) };
m_svcHost = new ServiceHost(typeof(WCFCalcLib.CalcService), adrbase);
ServiceEndpoint ep = m_svcHost.AddServiceEndpoint(typeof(ICalcService), new WebHttpBinding(), strAdrHTTP);
/*
ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
m_svcHost.Description.Behaviors.Add(mBehave);
BasicHttpBinding httpb = new BasicHttpBinding();
m_svcHost.AddServiceEndpoint(typeof(WCFCalcLib.ICalcService), httpb, strAdrHTTP);
m_svcHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
*
* */
/*
WebHttpBinding webHttpBinding = new WebHttpBinding();
webHttpBinding.MaxReceivedMessageSize = 65536 * 2;
webHttpBinding.MaxBufferPoolSize = 2147483647L;
webHttpBinding.MaxBufferSize = 2147483647;
webHttpBinding.MaxReceivedMessageSize = 2147483647L;
m_svcHost.AddServiceEndpoint(typeof(WCFCalcLib.ICalcService), webHttpBinding, strAdrHTTP);
*/
m_svcHost.Open();
}
Когда я пытаюсь сделать GET
запрос из браузера или из почтового ящика, я всегда получаю следующее сообщение об ошибке:
Сообщение с действием «не может быть обработано в приемнике из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть из-за несоответствия контракта (несоответствие действий между отправителем и получателем) или несоответствия привязки / безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют один и тот же контракт и одну и ту же привязку (включая требования безопасности, например сообщение, транспорт, нет).
Я не уверен, как я могу получить его, чтобы принимать app.config
запросы.
Если я запускаю проект через Visual Studio, я могу сделать GET
запрос очень хорошо, проблема в том, что я пытаюсь сделать это, когда он размещен в службе Windows.
Нет GET
- возможно, именно поэтому проблема происходит?
Как я могу получить WCF, который размещен в GET
запросах приема услуг Windows ?
Это ошибка, которую я получаю:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none">
<Code>
<Value>Sender</Value>
<Subcode>
<Value
xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</Value>
</Subcode>
</Code>
<Reason>
<Text xml:lang="en-US">
The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
</Text>
</Reason>
</Fault>
Теперь я изменил это на следующее:
Uri httpBaseAddress = new Uri("http://localhost:9001/CalcService");
m_svcHost = new ServiceHost(typeof(WCFCalcLib.CalcService), httpBaseAddress);
//Add Endpoint to Host
m_svcHost.AddServiceEndpoint(typeof(WCFCalcLib.ICalcService), new WSHttpBinding(), "");
//Metadata Exchange
ServiceMetadataBehavior serviceBehavior = new ServiceMetadataBehavior();
serviceBehavior.HttpGetEnabled = true;
m_svcHost.Description.Behaviors.Add(serviceBehavior);
//Open
m_svcHost.Open();
Теперь я могу ударить его, но не через реквизиты GET. Показывает wsdl.
Благодарю.