2009-11-04 9 views
0

Ceci est mon contrat de service:Comment utiliser MsmqIntegrationBinding avec une file d'attente non-transactionnelle?

<ServiceContract> _ 
<ServiceKnownType(GetType(String))> _ 
Public Interface ISecurityMasterChanged 

<OperationContract(IsOneWay:=True, Action:="*")> _ 
Sub ValidateCusipInMessage(ByVal message As MsmqMessage(Of String)) 

End Interface 

Ceci est ma classe

Public Class SecurityValidator 
    Implements ISecurityMasterChanged 

<OperationBehavior(TransactionAutoComplete:=False, TransactionScopeRequired:=False)> _ 
<ServiceKnownType(GetType(String))> _ 
Public Sub ValidateCusipInMessage(ByVal message As MsmqIntegration.MsmqMessage(Of String)) Implements ISecurityMasterChanged.ValidateCusipInMessage 
'... 
End Sub 

Lorsque je tente d'ouvrir le port avec ce code, je reçois une erreur

m_ServiceHostQueue = New ServiceHost(Me) 
    m_ServiceHostQueue.AddServiceEndpoint(GetType(ISecurityMasterChanged), New MsmqIntegrationBinding With {.ExactlyOnce = False}, m_Config("SMChanged Queue").ToString) 
    m_ServiceHostQueue.Open() 

System.InvalidOperationException Message = "L'opération 'ValidateCusipInMessage' du contrat 'ISecurityMasterChanged' est configurée avec TransactionAutoCo mplete vaut true et avec TransactionScopeRequired défini sur false. TransactionAutoComplete exige que TransactionScopeRequired est définie sur true. » Source = « System.ServiceModel »

Cela ne me fait pas de sens parce que, comme vous pouvez le voir, TransactionAutoComplete n'est pas définie sur true.

Répondre

0

La valeur par défaut pour TransactionAutoComplete est vrai, ce qui me fait me demander si vous devez décorer votre contrat avec cet attribut à la place de votre classe

+0

Non ce n'est pas un attribut de niveau contrat, il est spécifié correctement dans l'implémentation. –