日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WCF面向服务应用程序系列之十:绑定-标准绑定(HTTP/TCP)

發布時間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF面向服务应用程序系列之十:绑定-标准绑定(HTTP/TCP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 上一章我們介紹了WCF綁定的自定義綁定,這一章我們通過一個DEMO來介紹如何創建一個基于HTTP或者TCP協議的程序。在綁定時,我們要指定WCF的地址:要為不在IIS里承接的服務指定基地址;要為所有相讓服務支持的傳輸協議指定基地址,要指定相對于基地址的終結點地址。不要為終結點指定絕對地址,這樣做的優勢是:如果修改綁定使用一個不同的傳輸協議,修改簡單的修改在配置中指定的綁定地址,而不在需要修改終結點地址。

????? 開發環境:Visual Studio 2010 + Net Framework 4.0?。

??????1、創建一個WCF Service,主要代碼如下:

[ServiceContract(Name = "MediaStreamingContract", Namespace = "http://schemas.xinhaijulan.com/demos/StreamingTransfers")]
public interface IMediaStreaming
{
[OperationContract]
Stream GetMediaStream(
string mediaPath);
}

?

public class MediaStreaming : IMediaStreaming
{
public Stream GetMediaStream(string mediaPath)
{
FileInfo fileInfo
= new FileInfo(mediaPath);
if (!fileInfo.Exists)
{
throw new FileNotFoundException("File does not exist:{0}", mediaPath);
}

FileStream fileStream
= null;
try
{
fileStream
= new FileStream(mediaPath, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch
{
if (fileStream != null)
{
fileStream.Close();
fileStream.Dispose();
fileStream
= null;
}
}

return fileStream;
}
}

????? 在實現類中,我們打開一個文件,并返回文件流到客戶端。

????? 2、右鍵點擊App.config文件,選中Edit WCF Configuration進行編輯,我們添加2個baseAddress,一個是基于HTTP協議的;一個是基于TCP協議的。同時添加2個bindings項,一個是basicHttpBinding;一個是netTcpBinding。同時添加2個endpoint,一個是指向basicHttpBinding,一個是指向netTcpBinding。主要配置如下:

baseAddress:

<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/StreamingTransfersServer/MediaStreaming/" />
<add baseAddress="net.tcp://localhost:9001"/>
</baseAddresses>
</host>

?bindings:

<bindings>
<basicHttpBinding>
<binding name="basicHttpStreaming" maxBufferSize="40000000" maxReceivedMessageSize="40000000"
messageEncoding
="Mtom" transferMode="Streamed" />
</basicHttpBinding>
<netTcpBinding>
<binding name="netTcpStreaming" transferMode="Streamed" maxBufferSize="40000000"
maxReceivedMessageSize
="40000000" />
</netTcpBinding>
</bindings>

?

endpoint:

<endpoint address="basicHttp" binding="basicHttpBinding" bindingConfiguration="basicHttpStreaming" contract="StreamingTransfersServer.IMediaStreaming" />
<!--<endpoint binding="netTcpBinding" bindingConfiguration="netTcpStreaming" contract="StreamingTransfersServer.IMediaStreaming" />-->

????? 從endpoint配置來看,我們注釋了netTcpBinding。

????? 3、添加客戶端程序,添加引用,主要代碼如下:

static void Main(string[] args)
{
Console.WriteLine(
"waiting...");
using (SoundPlayer soundPlayer = new SoundPlayer())
{
using (StreamingTransfersServer.MediaStreamingContractClient client = new StreamingTransfersServer.MediaStreamingContractClient())
{
using (Stream serverStream = client.GetMediaStream(@"D:\1.wav"))
{
soundPlayer.Stream
= serverStream;
Console.WriteLine(
"playing");
soundPlayer.Play();
Console.WriteLine(
"played");
}
}
}

Console.ReadLine();
}

????? 我們從客戶端傳入一個wav的文件路徑,服務端根據這個路徑獲取到此文件流,并返回給客戶端。客戶端根據此文件流,播放文件。

????? 在添加引用時,Visual Studio幫助我們生成了客戶端的配置,代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_MediaStreamingContract" closeTimeout="00:01:00"
openTimeout
="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies
="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize
="40000000" maxBufferPoolSize="524288" maxReceivedMessageSize="40000000"
messageEncoding
="Mtom" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy
="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead
="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm
="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:8732/Design_Time_Addresses/StreamingTransfersServer/MediaStreaming/basicHttp"
binding
="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MediaStreamingContract"
contract
="StreamingTransfersServer.MediaStreamingContract"
name
="BasicHttpBinding_MediaStreamingContract" />
</client>
</system.serviceModel>
</configuration>

????? 我們可以看到,此時客戶端與服務端通信使用的是basicHttpBinding,然后,我們修改服務端的配置,把endpoint從basicHttpBinding改為netTcpBinding,代碼如下:

<!--<endpoint address="basicHttp" binding="basicHttpBinding" bindingConfiguration="basicHttpStreaming" contract="StreamingTransfersServer.IMediaStreaming" />-->
<endpoint binding="netTcpBinding" bindingConfiguration="netTcpStreaming" contract="StreamingTransfersServer.IMediaStreaming" />

????? 重新編譯服務端,并對客戶端的引用進行更新,此時,打開客戶端app.config文件,我們可以看到客戶端的配置已經由basicHttpBinding變為netTcpBinding,相應的配置信息與服務端是一致的,代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_MediaStreamingContract" closeTimeout="00:01:00"
openTimeout
="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow
="false" transferMode="Streamed" transactionProtocol="OleTransactions"
hostNameComparisonMode
="StrongWildcard" listenBacklog="10"
maxBufferPoolSize
="524288" maxBufferSize="40000000" maxConnections="10"
maxReceivedMessageSize
="40000000">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead
="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled
="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:9001/" binding="netTcpBinding"
bindingConfiguration
="NetTcpBinding_MediaStreamingContract"
contract
="StreamingTransfersServer.MediaStreamingContract"
name
="NetTcpBinding_MediaStreamingContract">
<identity>
<userPrincipalName value="CS\Administrator" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

????? 無論是basicHttpBinding還是netTcpBinding,運行代碼后,都能夠聽到wav文件的播放聲音。至此標準綁定(HTTP/TCP)介紹完畢,其它基于MSMQ或IPC的綁定我們以后專門介紹。

點擊下載DEMO。

?

作者:心海巨瀾
出處:http:
//xinhaijulan.cnblogs.com
版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

?

轉載于:https://www.cnblogs.com/xinhaijulan/archive/2010/10/24/1859700.html

總結

以上是生活随笔為你收集整理的WCF面向服务应用程序系列之十:绑定-标准绑定(HTTP/TCP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。