Condividi tramite


Considerazioni sulla pubblicazione di servizi Web con gli adapter di ricezione WCF

In questo argomento vengono fornite informazioni che è opportuno tenere in considerazione durante la pubblicazione di servizi WCF con gli adapter di ricezione WCF. Quando un servizio viene pubblicato tramite un adapter WCF, può essere chiamato da un client WCF come se fosse un normale servizio WCF.

Hosting In-Process

L'hosting della posizione di ricezione all'interno dello spazio di BizTalk Server processo, btsntsvc.exe, consente i vantaggi dello sviluppo e della distribuzione semplificati. Inoltre, crea più istanze host rispetto all'hosting in IIS per sfruttare le funzionalità di disponibilità elevata e bilanciamento del carico di BizTalk Server. Per informazioni sull'hosting all'esterno del processo di BizTalk Server in IIS, vedere Configurazione di IIS per gli adapter di ricezione WCF isolati.

Impostare su false la proprietà IsOneWay dei servizi WCF pubblicati con gli adapter WCF (ad eccezione dell'adapter di ricezione WCF-NetMsmq)

La proprietà System.ServiceModel.OperationContractAttribute.IsOneWay dei servizi WCF pubblicati con gli adapter WCF, ad eccezione dei servizi pubblicati con l'adattatore di ricezione WCF-NetMsmq in cui è impostata su true , è impostata su false anche per le posizioni di ricezione unidirezionale. Se la proprietà IsOneWay è impostata su false, anche i metodi che restituiscono un risultato void generano un messaggio di risposta. In questo caso, l'infrastruttura crea e invia un messaggio vuoto per segnalare al chiamante il termine dell'esecuzione del metodo chiamato. Questa procedura consente all'infrastruttura di restituire al client le eccezioni generate dal servizio.

Per utilizzare i servizi WCF pubblicati con gli adapter WCF (ad eccezione dell'adattatore di ricezione WCF-NetMsmq) in cui IsOneWay è false, la proprietà IsOneWay sul lato client deve essere impostata su false come indicato di seguito:

[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    [OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
    string SampleMethod(string msg);
}

Nota

Poiché il valore predefinito della proprietà IsOneWay è false, non è necessario specificare la proprietà nel codice.

La proprietà ReplyAction di OperationContractAttribute sul lato client deve essere impostata su "*" (asterisco) durante l'utilizzo di servizi WCF pubblicati con indirizzi di ricezione unidirezionali

La proprietà System.ServiceModel.OperationContractAttribute.ReplyAction di System.ServiceModel.OperationContractAttribute può essere utilizzata sul lato client per specificare il valore dell'azione SOAP per i messaggi di risposta dai servizi WCF.

Oltre a specificare un determinato valore per l'intestazione azione del messaggio di risposta, al fine di notificare al client la ricezione di una risposta e l'azione da intraprendere, è possibile specificare anche la stringa "*" (asterisco). Specificando un asterisco in un'applicazione client si indica al client di non convalidare l'azione di risposta nei messaggi di risposta inviati dal servizio.

Per utilizzare un servizio WCF pubblicato da un percorso di ricezione unidirezionale, il metodo proxy per il servizio WCF deve restituire void, nel qual caso il metodo proxy prevede che il servizio WCF invierà un messaggio vuoto per indicare al chiamante che il metodo ha restituito. Affinché il metodo proxy riceva questo messaggio vuoto, la proprietà ReplyAction di OperationContractAttribute deve essere impostata su "*" (asterisco) come indicato di seguito:

[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    [OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
    string SampleMethod(string msg);
}

Nota

Non è necessario impostare la proprietà ReplyAction su "*" (asterisco) per l'adapter WCF-NetMsmq, perché l'adattatore WCF-NetMsmq richiede ai client WCF di impostare la proprietà IsOneWay su true.

Un'istanza dell'host di tipo Isolato può eseguire un solo adapter

Un'istanza dell'host di tipo Isolato può eseguire un solo adapter. Se si configurano i gestori di ricezione di più adapter isolati, ad esempio adapter HTTP, SOAP e WCF, con un unico host di tipo Isolato, è necessario creare più pool di applicazioni, uno per ogni adapter. Per altre informazioni sugli host isolati BizTalk, vedere Abilitazione dei servizi Web.

Utilizzare l'opzione "Modello: contenuto specificato dal modello" per l'invio di messaggi di risposta con contenuto non XML

Le schede WCF con corpo - Corpo del messaggio di risposta BizTalk (valore predefinito) non consentono l'invio di messaggi non XML, ad esempio dati di tipo carattere e immagini bitmap. È possibile usare l'opzione Modello - contenuto specificato dall'opzione modello per gli adapter WCF per l'invio di messaggi non XML. Per altre informazioni sull'uso del modello, vedere Specifica del corpo del messaggio per gli adapter WCF.

Impostazione delle autorizzazioni per un servizio WCF pubblicato con la Pubblicazione guidata servizio WCF

Quando si usano applicazioni ASP.NET create con la Pubblicazione guidata servizio WCF nella piattaforma Windows Server 2008 SP2 o Windows Server 2008 R2, possono verificarsi errori relativi all'accesso alle DLL durante la chiamata al servizio WCF. Questi errori sono in genere correlati ai problemi relativi alla sicurezza predefinita di Windows Server 2008 SP2 e Windows Server 2008 R2. Per altre informazioni su questi errori, vedere l'articolo della Guida e del supporto tecnico Microsoft denominato "You Receive a "System.IO.FileNotFoundException" Error When the Client Application Calls a Web Service "You Receive a "System.IO.FileNotFoundException" (Errore "System.IO.FileNotFoundException" quando l'applicazione client chiama un servizio Web) nel sito Web della Guida e del supporto tecnico all'indirizzo https://go.microsoft.com/fwlink/?LinkId=43659.

BizTalk Server richiede che al processo che esegue il servizio WCF vengano concesse le autorizzazioni appropriate, indipendentemente dal fatto che un host in-process o un host isolato esegua il servizio. In Windows Server 2008 SP2 e Windows Server 2008 R2 il gruppo di Windows predefinito per gli host isolati è il gruppo utenti host isolati, quindi l'aggiunta delle autorizzazioni al gruppo utenti host isolati deve risolvere questo problema.

Per aggiungere le autorizzazioni al gruppo utenti host di tipo Isolato

  1. In Esplora risorse individuare la directory %windir%\temp.

  2. Fare clic con il pulsante destro del mouse su %windir%\temp, quindi scegliere Proprietà.

  3. Nella finestra di dialogo Proprietà fare clic sulla scheda Sicurezza.

  4. Fare clic su Aggiungi, selezionare il gruppo Utenti host isolati e quindi fare clic su OK.

Impostazione delle autorizzazioni per un indirizzo di ricezione WCF con l'adapter WCF-NetMsmq

Quando un client WCF che utilizza NetMsmqBinding invia un messaggio a un servizio WCF pubblicato con l'adapter WCF-NetMsmq, indirizza il messaggio alla coda di destinazione, ovvero la coda gestita dal gestore code del servizio. Il gestore delle code sul client invia il messaggio a una coda di trasmissione (o in uscita), La coda di trasmissione è una coda inclusa nel gestore code sul lato client in cui vengono archiviati i messaggi che devono essere trasmessi alla coda di destinazione.

Il gestore code del servizio accetta i messaggi indirizzati alle proprie code di destinazione e li archivia. Il servizio invia quindi richieste di lettura della coda di destinazione e il gestore code recapita i messaggi al servizio. Per questo motivo è necessario che l'account del servizio dell'istanza dell'host BizTalk che ospita l'indirizzo di ricezione disponga dell'autorizzazione di lettura della coda di destinazione.

Utilizzare un'espressione di percorso del corpo vuota per ricevere un messaggio SOAP contenente dati di tipo carattere nell'elemento SOAP Body

Affinché un adattatore di ricezione WCF crei un messaggio BizTalk da un messaggio di risposta in arrivo con dati di tipo carattere nel contenuto dell'elemento Corpo SOAP, come illustrato nell'esempio seguente, è necessario lasciare vuota la casella di testo Espressione percorso corpo nella scheda Messaggio della finestra di dialogo proprietà trasporto dell'adapter WCF.

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
      ...
    </s:Header>
    <s:Body>Contoso</s:Body>
</s:Envelope>

Se si seleziona l'opzione Busta o Corpo , l'adapter non può creare il messaggio BizTalk dal messaggio in arrivo precedente. Il messaggio non viene sospeso poiché tale operazione non è prevista per i messaggi in cui il marshalling SOAP in ingresso non è riuscito. Per altre informazioni su come usare l'espressione del percorso del corpo nella scheda Messaggio , vedere Specifica del corpo del messaggio per gli adapter WCF.

Nota

È possibile usare lo strumento TraceViewer (SvcTraceViewer.exe) in Windows SDK configurando il file BTSNTSvc.exe.config.file. Per altre informazioni su Windows SDK, vedere "Novità di Windows SDK" all'indirizzo https://go.microsoft.com/fwlink/?LinkId=75219. Per altre informazioni sullo strumento TraceViewer, vedere "TraceViewer Tool (SvcTraceViewer.exe)" all'indirizzo https://go.microsoft.com/fwlink/?LinkId=75218.

Utilizzo di schemi che fanno riferimento ad altri schemi

È possibile usare la ridefinizione, l'inclusione e l'importazione di elementi quando gli schemi diventano di grandi dimensioni e complessi oppure quando gli schemi che rappresentano i diversi tipi di messaggi di istanza hanno alcune parti in comune. Può essere utile unire schemi di dimensioni inferiori agli schemi che definiscono la struttura dei messaggi di istanza che si prevede di scambiare con i partner commerciali. Tali schemi possono essere pubblicati come servizi WCF utilizzando la Pubblicazione guidata servizio WCF BizTalk.

L'Utilizzo guidato servizio WCF BizTalk consente di creare gli elementi BizTalk necessari per utilizzare i servizi WCF da un progetto BizTalk. Se si desidera utilizzare i servizi WCF da un'applicazione .NET, è necessario utilizzare lo strumento ServiceModel Metadata Utility Tool (Svcutil.exe) per creare la classe proxy per i servizi WCF. Per altre informazioni su come usare schemi che fanno riferimento ad altri schemi, vedere Schemi che usano altri schemi e Come creare schemi che usano altri schemi. Per altre informazioni su Svcutil.exe, vedere "Service Model Metadata Utility Tool (Svcutil.exe)" all'indirizzo https://go.microsoft.com/fwlink/?LinkID=74696.

Nella tabella seguente sono illustrate le limitazioni e le considerazioni da tenere presenti quando si utilizzano servizi WCF pubblicati con schemi che utilizzano altri schemi.

Elemento XML Schema Utilizzo di servizi WCF pubblicati con la Pubblicazione guidata servizio WCF BizTalk Utilizzo di servizi WCF ospitati in applicazioni .NET
<import> Supportato sia con l'Utilizzo guidato servizio WCF BizTalk sia con Svcutil.exe Supportato sia con l'Utilizzo guidato servizio WCF BizTalk sia con Svcutil.exe
<include> Supportato sia con l'Utilizzo guidato del servizio WCF BizTalk che Svcutil.exe Nota: Svcutil.exe può generare un messaggio di avviso durante la creazione della classe proxy. Supportato sia con l'Utilizzo guidato del servizio WCF BizTalk che Svcutil.exe Nota: Svcutil.exe può generare un messaggio di avviso durante la creazione della classe proxy.
<redefine> - Supportato con l'Utilizzo guidato del servizio WCF BizTalk
- Supporto limitato da Svcutil.exe Nota: Svcutil.exe ha la stessa limitazione per l'elemento ridefinire come XSD.exe ha.
Supportato sia con l'Utilizzo guidato del servizio WCF BizTalk che Svcutil.exe Nota: Svcutil.exe può generare un messaggio di avviso durante la creazione della classe proxy.

Nota

Svcutil.exe può generare un messaggio di avviso durante la creazione della classe proxy sul servizio WCF BizTalk pubblicato con gli schemi che usano gli elementi di inclusione e ridefinizione . ad esempio per indicare che l'elemento globale è già stato dichiarato.

Assicurarsi che l'indirizzo di ricezione WCF In-Process non venga disabilitato dopo la modifica della parte nome computer nell'indirizzo dell'endpoint del servizio

Se si modifica la parte del nome computer nella casella di testo Indirizzo (URI) di un percorso di ricezione WCF in esecuzione, è consigliabile usare la console di amministrazione BizTalk per verificare se il percorso di ricezione è ancora in esecuzione. Ad esempio, se si modifica un indirizzo dell'endpoint di servizio usando l'adattatore di ricezione WCF-NetTcp, net.tcp://<Nome>computer/samplepath, in net.tcp://localhost/samplepath, il percorso di ricezione potrebbe essere disabilitato con un'eccezione Service.InvalidOperationException. Se si modifica solo la parte nome computer nell'indirizzo dell'endpoint del servizio senza modificare la parte percorso, assicurarsi che l'indirizzo di ricezione non venga disabilitato e se necessario riabilitarlo.

Impostare le opzioni di configurazione della sicurezza di MSDTC appropriate nei computer client che comunicano con indirizzi di ricezione WCF remoti tramite un protocollo di transazione

WCF-NetTcp, WCF-WSHttp e WCF-NetNamedPipe gli adapter di ricezione possono partecipare ai processi di coordinamento transazionale gestiti dai client WCF con i protocolli di transazione WS-AtomicTransaction e OleTransaction . Questi protocolli consentono di trasmettere i messaggi agli indirizzi di ricezione di destinazione e di eliminarli dal database MessageBox in un contesto transazionale.

Per comunicare con percorsi di ricezione WCF remoti usando i protocolli di transazione, è necessario configurare in modo appropriato le opzioni di configurazione della sicurezza MSDTC nei computer client WCF. Nella tabella seguente sono elencati i valori necessari per le opzioni disponibili nella finestra di dialogo Configurazione sicurezza MSDTC:

Opzione di configurazione Valore predefinito Valore consigliato
Accesso di rete DTC Disabled Attivato
Consenti connessioni in uscita Disabled Attivato
Necessaria autenticazione reciproca Attivato Abilitato se i percorsi di ricezione remota corrispondenti eseguono Windows Server 2003 SP1 o SP2 e sono configurati con l'autenticazione reciproca obbligatoria.
Necessaria autenticazione del chiamante in ingresso Disabled Abilitato se MSDTC viene eseguito in un cluster.

Dopo avere applicato queste modifiche, è necessario riavviare il servizio MSDTC.

Per accedere alla finestra di dialogo Configurazione sicurezza MSDTC, seguire questa procedura:

  1. Fare clic su Start, fare clic su Esegui e digitare dcomcnfg per avviare la console di gestione dei servizi componenti .

  2. Espandere Servizi componenti, espandere Computer, fare clic con il pulsante destro del mouse su Computer e quindi scegliere Proprietà.

  3. Nella finestra di dialogo Proprietà computer personali fare clic sulla scheda MSDTC e quindi scegliere Configurazione sicurezza per visualizzare la finestra di dialogo Configurazione sicurezza .

Spiegazione del wrapper SOAP quando si utilizza la Pubblicazione guidata servizio WCF BizTalk

Quando un'orchestrazione viene esposta come servizio Windows Communication Foundation (WCF) usando la Pubblicazione guidata del servizio WCF, viene generato un wrapper. Tale wrapper utilizza il nome del metodo della porta specificato nel messaggio XML a cui viene inviato il messaggio ed è il wrapper predefinito per le buste SOAP Microsoft. Consente a WCF di eseguire il wrapping del messaggio SOAP in più parti in un messaggio WCF da trasmettere all'endpoint dall'adattatore.

Come procedura consigliata, il mittente deve usare un wrapper e il ricevitore deve aspettarlo oppure il mittente non deve usare un wrapper e il ricevitore deve prevedere il messaggio WCF non elaborato. Se l'utilizzo o meno di un wrapper non viene concordato preventivamente, potrebbero verificarsi problemi di incompatibilità tra i messaggi inviati e i messaggi ricevuti.