共用方式為


作法:設定 COM+ 服務設定

使用 COM+ 服務組態工具加入或移除應用程式介面時,Web 服務組態會在應用程式的組態檔中更新。 在 COM+ 裝載模式中,Application.config 檔案放在應用程式根目錄中 (%PROGRAMFILES%\ComPlus Applications\{appid} 是預設值)。 在兩個 Web 裝載模式中,Web.config 檔案都會放在指定的 vroot 目錄中。

注意

訊息簽章應用來保護用戶端和伺服器之間的訊息不受竄改。 此外,訊息或傳輸層加密也應該用來保護用戶端和伺服器之間的訊息,以免資訊洩漏。 如同 Windows Communication Foundation (WCF) 服務,您應使用節流來限制並行呼叫、連線、執行個體和擱置作業的數目。 這有助防止資源過度消耗。 節流行為是透過服務組態檔設定所指定的。

範例

試想實作下列介面的元件:

[Guid("C551FBA9-E3AA-4272-8C2A-84BD8D290AC7")]  
public interface IFinances  
{  
    string Debit(string accountNo, double amount);  
    string Credit(string accountNo, double amount);  
}  

如果元件公開為 Web 服務,則公開 (且用戶端必須符合) 的對應服務合約如下:

[ServiceContract(Session = true,  
Namespace = "http://tempuri.org/C551FBA9-E3AA-4272-8C2A-84BD8D290AC7",  
Name = "IFinances")]  
public interface IFinancesContract : IDisposable  
{  
    [OperationContract]  
    string Debit(string accountNo, double amount);  
    [OperationContract]  
    string Credit(string accountNo, double amount);  
}  

注意

IID 是做為合約的初始命名空間一部分。

使用這個服務的用戶端應用程式必須符合這個合約,並且使用與應用程式組態中所指定的繫結相容的繫結。

下列程式碼範例中會示範預設組態檔。 身為 Windows Communication Foundation (WCF) Web 服務,這符合標準服務模型組態架構,而且可以透過與其他 WCF 服務組態檔相同的方式來編輯。

一般修改包含:

  • 將端點位址從預設形式 ApplicationName/ComponentName/InterfaceName 變更為更容易使用的形式。

  • 將服務的命名空間從預設格式 http://tempuri.org/InterfaceID 修改為更有意義的格式。

  • 變更端點以使用不同的傳輸繫結。

    在 COM+ 裝載案例中,預設會使用具名管道,但也可以使用像 TCP 的電腦外傳輸。

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
    <system.serviceModel>  
        <bindings>  
            <netNamedPipeBinding>  
                <binding name="comNonTransactionalBinding" />  
                <binding name="comTransactionalBinding" transactionFlow="true" />  
            </netNamedPipeBinding>  
        </bindings>  
        <comContracts>  
            <comContract contract="{C551FBA9-E3AA-4272-8C2A-84BD8D290AC7}"  
                name="IFinances" namespace="http://tempuri.org/C551FBA9-E3AA-4272-8C2A-84BD8D290AC7"  
                requiresSession="true">  
                <exposedMethods>  
                    <add exposedMethod="Debit" />  
                    <add exposedMethod="Credit" />  
                </exposedMethods>  
            </comContract>  
        </comContracts>  
        <services>  
            <service name="{DCDB24CC-0B19-4534-95CD-FBBFF4D67DD9},{C942B840-AD54-4A44-B5F7-928130980AB9}">  
                <endpoint address="IFinances" binding="netNamedPipeBinding" bindingConfiguration="comNonTransactionalBinding"  
                    contract="{C551FBA9-E3AA-4272-8C2A-84BD8D290AC7}" />  
                <host>  
                    <baseAddresses>  
                        <add baseAddress="net.pipe://localhost/ServiceModelDocSampleApp/ServiceModelDocSample.esFinance" />  
                    </baseAddresses>  
                </host>  
            </service>  
        </services>  
    </system.serviceModel>  
</configuration>  

另請參閱