Сбой хостинга службы WCF при использовании привязки netMsmqBinding с хостингом IIS - PullRequest
2 голосов
/ 17 марта 2012

Служба WCF при хостинге с IIS не работает.Web.config для службы:

<system.serviceModel>
    <bindings>
        <netMsmqBinding>
            <binding name="msmqbindingnontransactionalnonsecure" exactlyOnce="False">
                <security mode="None" />
            </binding>
        </netMsmqBinding>
    </bindings>
    <services>
        <service name="MsmqService.MsmqService">
            <endpoint address="net.msmq://localhost/private/msmqpoc/MsmqService.svc"  binding="netMsmqBinding" bindingConfiguration="msmqbindingnontransactionalnonsecure" contract="MsmqWCFService.IMsmqContract" />
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true"/>
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Договор на обслуживание:

[ServiceContract]
public interface IMsmqContract
{
    [OperationContract(IsOneWay = true)]
    void SendMessage(string message);
}

При размещении службы в IIS отображается следующее сообщение:

Server Error in '/msmqpoc' Application.
--------------------------------------------------------------------------------

Binding validation failed because the binding's ExactlyOnce property is set to true while the destination queue is non-transactional. The service host cannot be opened. Resolve this conflict by setting the ExactlyOnce property to false or creating a transactional queue for this binding. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Binding validation failed because the binding's ExactlyOnce property is set to true while the destination queue is non-transactional. The service host cannot be opened. Resolve this conflict by setting the ExactlyOnce property to false or creating a transactional queue for this binding.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.      
Stack Trace:
[InvalidOperationException: Binding validation failed because the binding's ExactlyOnce property is set to true while the destination queue is non-transactional. The service host cannot be opened. Resolve this conflict by setting the ExactlyOnce property to false or creating a transactional queue for this binding.]

Конфигурация уже установлена ​​в значение OnlyOnce = false, не знаете, почему возникает эта ошибка, какая-либо помощь?

1 Ответ

2 голосов
/ 18 марта 2012

Я могу только предположить, что ваша служба не подобрала правильный файл конфигурации.Я бы посоветовал дважды проверить это.Я не вижу проблем с файлом конфигурации, который вы опубликовали.

Немного не по теме, я бы рискнул подумать о том, почему вы используете нетранзакционные очереди.Единственная причина, по которой вы будете их использовать, заключается в том, что ваша общая архитектура может терпеть потерю сообщений.

Например, в некоторых системах с низкой задержкой сообщения ценны только в течение не более секунд, прежде чем становятся недействительными.Поэтому в этом случае вам не нужно использовать транзакционные очереди.

Если вы не можете терпеть потерю сообщения, вы должны использовать транзакционную очередь.

...