Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¹¹½¨»ìºÏÓ¦Ó÷½Ê½Ö®Azure WCFÖмÌ
 
À´Ô´:À´×ÔÍøÂç ·¢²¼ÓÚ£º 2017-7-13
  1870  次浏览      27
 

ʹÓÃVPN»òÕßER·þÎñ½¨Á¢ÔÆ·þÎñºÍ±¾µØ·þÎñÍøÂçͨµÀÀ´´î½¨»ìºÏÓ¦Óõķ½Ê½£¬ÐèÒªÍøÂçÉ豸µÄÅäºÏºÍ±È½Ï¸´ÔÓµÄÍøÂçÅäÖã¬ËùÒÔ²»ÊÇÌØ±ðµÄ·½±ã¡£Èç¹ûÊDz»Ï£Íû¶Ô±¾µØÍøÂç»·¾³×öÐ޸쬶øÖ»ÊÇ·þÎñ²ãÃæµÄ»ìºÏ£¬ÄÇô¿ÉÒÔʹÓÃÒ»¸ö¸ü·½±ãµÄ·þÎñ ¨C AzureÖм̷þÎñ¡£»ùÓÚAzureÖм̷þÎñ·ÃÎʱ¾µØ·þÎñ£¬¿Í»§¶Ë²»ÐèÒªÓë±¾µØ·þÎñ½¨Á¢Ö±½ÓÁ¬½Ó£¬Ò²²»ÐèÒªÁ˽â·þÎñËùÔÚµÄλÖ㬲¢ÇÒ±¾µØ·þÎñÎÞÐèÔÚ·À»ðǽÉÏ´ò¿ªÈκÎÈëÕ¾¶Ë¿Ú¡£

AzureÖм̷þÎñÖ§³Ö´«Í³µÄµ¥ÏòÏûÏ¢´«ËÍ¡¢ÇëÇó/ÏìÓ¦ÏûÏ¢´«ËͺͶԵÈÏûÏ¢´«ËÍ¡£Ëü»¹Ö§³Ö Internet ·¶Î§µÄʼþ·Ö·¢£¬ÒÔʵÏÖ·¢²¼-¶©ÔÄ·½°¸ºÍË«ÏòÌ×½Ó×ÖͨÐÅ£¬´Ó¶øÌá¸ßµãµ½µãͨÐÅЧÂÊ¡£ÔÚÖмÌÏûÏ¢´«ËÍģʽÖУ¬±¾µØ·þÎñ»áͨ¹ý³öÕ¾¶Ë¿ÚÁ¬½ÓÖÁÖм̷þÎñ£¬²¢Îª°ó¶¨ÖÁÌØ¶¨»áºÏµØÖ·µÄͨÐÅ´´½¨Ò»¸öË«ÏòÌ×½Ó×Ö¡£È»ºó£¬¿Í»§¶Ë¿ÉÒÔͨ¹ý½«ÏûÏ¢·¢Ë͵½µÖ´ï»áºÏµØÖ·µÄÖм̷þÎñÀ´Óë±¾µØ·þÎñͨÐÅ¡£

ĿǰAzureÌṩÁ½ÖÖÖм̷þÎñ£¬WCF£¨Windows Communication Foundation£©Öм̺ͻìºÏÁ¬½Ó¡£ÆäÖÐWCFÖмÌÊÇ´«Í³µÄ·þÎñ£¬ÊʺÏÓÚ»ùÓÚWCFµÄ±¾µØ·þÎñ¡££¨¹ØÓÚWCFÇë²ÎÔÄ WCF ¹Ù·½Îĵµ£©¡£¶ø»ìºÏÁ¬½ÓʹÓÿª·Å±ê×¼WebÌ×½Ó×Ö£¬¿ÉʵÏÖ¶àÆ½Ì¨·½°¸£¬ÊÊÓÃÐÔ¸ü¹ã¡£

±¾ÎĽéÉÜÈçºÎʹÓÃWCFÖмÌÀ´¹¹½¨»ìºÏÓ¦Óá£

WCFÖмÌ

WCFÖмÌÔÊÐíÄãÏò¹«ÓÐÔÆ¹«¿ªÎ»ÓÚÆóÒµÍøÂçÄÚµÄWCF·þÎñ£¬¶øÎÞÐè´ò¿ª·À»ðǽÁ¬½Ó£¬Ò²ÎÞÐè¶ÔÆóÒµÍøÂç»ù´¡½á¹¹½øÐг¹µ×µÄ¸ü¸Ä¡£¶øÇÒËü»¹ÔÊÐíÄ㰲ȫµÄ¿ØÖÆË­¿ÉÒÔ·ÃÎÊÕâЩ·þÎñ¡£ÁíÍâ¶ÔÄãÔ­À´µÄWCFÏîÄ¿ËùÐèÒª×öµÄ¸Ä¶¯Ò²ÊǺÜСµÄ¡£

»ùÓÚTCPµÄSOAP·ÃÎÊ

ÊÊÓÃÓÚÖ§³ÖSOAPЭÒéµÄ¿Í»§¶Ë¡£

´´½¨WCFÖм̷þÎñ

¿ÉÒԵǽAzureÖйúÃÅ»§ÍøÕ¾£¬°´ÕÕ½çÃæÌáʾһ²½²½´´½¨¡£Ò²¿ÉÒÔͨ¹ýPowerShellÃüÁÈçÏ£¬ÆäÖд´½¨wcfÖмÌʱ£¬WcfRelayTypeÉèÖÃΪNetTcp¡£RequiresTransportSecurity ºÍ RequiresClientAuthorization ĬÈ϶¼ÊÇ true £¬ÕâÀïÏÔʾָ¶¨Ö»ÊÇ´¦ÓÚÑÝʾ×÷Óá£

# login to Azure China with your account
Login-AzureRmAccount -Environment AzureChinaCloud

$rgName = "relaydemorg"
$namespaceName = "relaydemons"
$location = "China East"
$relayType = "NetTcp"
$relayName = "tcpdata"

New-AzureRmResourceGroup -Name $rgName -

Location $location
New-AzureRmRelayNamespace -ResourceGroupName

$rgName -Name $namespaceName -Location

$location
New-AzureRmWcfRelay -ResourceGroupName $rgName

-Namespace $namespaceName -Name $relayName

-WcfRelayType $relayType -RequiresTransport

Security $true -RequiresClientAuthorization $true

 

´´½¨³öÀ´µÄWCFÖм̷þÎñµØÖ·ÊÇsb:// relaydemons . servicebus . chinacloudapi . cn / tcpdata

ͨ¹ýWCFÖм̹«¿ª±¾µØWCF·þÎñ

¸ø±¾µØ·þÎñ°²×°·þÎñ×ÜÏßNuGet°ü£¬Ä¬Èϰ²×°×îа汾¡£

PM> Install-package WindowsAzure.ServiceBus

°²×°Íê³Éºó£¬ÔÚconfigÎļþÀïÃæ»á×Ô¶¯Ìí¼ÓһЩÀ©Õ¹µÄÐÐΪºÍ°ó¶¨ÉùÃ÷£¬±ÈÈ磺

<behaviorExtensions>
<add name="transportClientEndpointBehavior"
type="Microsoft.ServiceBus.Configuration.Transport

ClientEndpointBehaviorElement, Microsoft.ServiceBus,

Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</behaviorExtensions>
<bindingExtensions>
<add name="netTcpRelayBinding"
type="Microsoft.ServiceBus.Configuration.NetTcpRelay

BindingCollectionElement, Microsoft.ServiceBus,

Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</bindingExtensions>

 

ÎļþÅäÖ÷½Ê½

ÐÞ¸ÄconfigÎļþ£¬Ìí¼ÓÈçÏÂendpointBehavior£¬ÆäÖÐkeyÐèÒªÓмàÌýȨÏÞ

<endpointBehaviors>
<behavior name="sbTokenProvider">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="<listenKey>"

key="<keyValue>" />
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>

 

Ç°Ãæ´´½¨µÄWCFÖм̷þÎñÀàÐÍʱNetTcp£¬ËùÒÔÕâÀïÌí¼Ó

<endpoint contract="<yourcontract>"
binding="netTcpRelayBinding"
address="sb://relaydemons.servicebus.chinacloudapi.

cn/tcpdata"
behaviorConfiguration="sbTokenProvider"/>

°ó¶¨ÎªnetTcpRelayBindingµÄÖÕ½áµã£¬²¢Ö¸ÏòÇ°Ãæ´´½¨µÄWCFÖм̷þÎñµØÖ·

´úÂ뷽ʽ

×¢Ò⣬ÕâÀïÖм̷þÎñµØÖ·²»ÄÜÓÃServiceBusEnvironment.CreateServiceUri("sb", "namespace", "tcpdata"))À´Éú³É£¬ÒòΪËüÉú³ÉµÄµØÖ·²»ÊÇÖйúAzureµÄ¡£

string relaySvcAddress = "sb://relaydemons.servicebus.chinacloudapi.cn/tcpdata";
ServiceHost sh = new ServiceHost(typeof(<yourservice>));
sh.AddServiceEndpoint(typeof(<yourservice>), new NetTcpRelayBinding(), relaySvcAddress)
.EndpointBehaviors.Add(new TransportClientEndpointBehavior
{
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider

("listenKey", "keyValue")
});

 

ÒòΪWCFÖ§³Ö¶Ôͬһ¸ö·þÎñʹÓöà¸öÍøÂçÖÕ½áµã£¬ËùÒÔ¿ÉÒÔÔÚÌí¼ÓÖм̷þÎñÖÕ½áµãÒÔ±ãÍⲿ·ÃÎʵÄͬʱ±£ÁôÏÖÓеÄÄÚ²¿ÖÕ½áµã¡£

´´½¨¿Í»§¶Ë½øÐÐSOAP·ÃÎÊ

¿Í»§¶ËÒ²ÐèÒª°²×°·þÎñ×ÜÏßNuGet°ü£¬ÏàÓ¦µÄÖм̷þÎñÏà¹ØÀ©Õ¹Ò²»á×Ô¶¯Ìí¼ÓÔÚConfigÎļþÖС£

ÎļþÅäÖ÷½Ê½£¬¸ú·þÎñ¶ËÒ»Ñù£¬Ò²ÐèÒªÌí¼ÓͬÑùµÄendpointBehavior£¬Ö»ÊÇkey»»³ÉÐèÒª·¢ËÍȨÏÞ¡£ÁíÍâÌí¼Ó¸ú·þÎñ¶ËÍêȫһÖµÄÖÕ½áµãÅäÖá£

<endpointBehaviors>
<behavior name="sbTokenProvider">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="<sendKey>" key="<keyValue>" />
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>

 

´úÂ뷽ʽҲÊǸú·þÎñ¶ËÀàËÆ£¬Ìí¼ÓÏàÓ¦µÄNetTcpBinding£¬ÖÕ½áµãµØÖ·TransportClientEndpointBehavior¡£

string relaySvcAddress = "sb://relaydemons.servicebus.

chinacloudapi.cn/tcpdata";
var cf = new ChannelFactory<yourcontract>(
new NetTcpRelayBinding(),
new EndpointAddress(relaySvcAddress));

cf.Endpoint.Behaviors.Add(new TransportClientEnd

pointBehavior
{
TokenProvider = TokenProvider.CreateSharedAccess

SignatureTokenP

rovider("<sendKey>","<keyValue>")
});

 

»ùÓÚHTTPµÄREST·ÃÎÊ

WCF·þÎñ±¾ÉíÖ§³Ö·þÎñÒÔRESTµÄÐÎʽ¹«¿ª³öÀ´£¬ÄÇôͬÑùµÄ£¬¿Í»§¶ËҲϣÍûÄÜÓÃÆÕͨµÄHTTPÀ´·ÃÎÊ¡£¶ÔÓÚÕâÖÖÐÎʽ£¬WCFÖм̷þÎñÒ²ÊÇÖ§³ÖµÄ¡£

´´½¨WCFÖм̷þÎñ

¸úÇ°ÃæTCP·½Ê½µÄ²½ÖèÒ»Ñù£¬Î¨Ò»µÄÇø±ðÊÇ WcfRelayType ÉèÖÃΪ Http £¬·þÎñÃû³ÆÒ²×öÏàÓ¦µÄÃüÃû£¬±ÈÈç httpdata ¡£ÕâÑù´´½¨³öÀ´µÄWCFÖм̷þÎñµØÖ·ÊÇhttps:// relaydemons . servicebus . chinacloudapi . cn / httpdata

ͨ¹ýWCFÖм̹«¿ª±¾µØWCF·þÎñ

ÓëTCP·½Ê½¶Ô±È£¬ÓÐÁ½¸ö²»Ò»ÑùµÄµØ·½

1.HostʹÓÃWebServiceHost

2.°ó¶¨Ê¹ÓÃWebHttpRelayBinding

ͨ¹ýHTTP·½Ê½¹«¿ª£¬Ä¬ÈÏÇé¿öÏÂÊÇ¿ÉÒÔÔÊÐíÈκοͻ§¶Ë·ÃÎʵģ¬ÕâÑù²»°²È«£¬ËùÒÔÐèÒªÔÚWebHttpRelayBindingÀïÅäÖà RelayClientAuthenticationType Ϊ RelayAccessToken £¬ÕâÑù¿Í»§¶Ë¾Í±ØÐëÌṩÕýÈ·ÁîÅÆ²ÅÄÜ·ÃÎÊ¡£

ÎļþÅäÖ÷½Ê½

<system.serviceModel>
<bindings>
<webHttpRelayBinding>
<binding name="default">
<security relayClientAuthenticationType

="RelayAccessToken"/>
</binding>
</webHttpRelayBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="sbTokenProvider">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="listenKey"

key="keyValue" />
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="yourservice">
<endpoint name="sbRelayEndpoint"
address="https://relaydemons.servicebus.

chinacloudapi.cn/ httpdata "
binding="webHttpRelayBinding"
bindingConfiguration="default"
behaviorConfiguration="sbTokenProvider"
contract="yourcontract" />
</service>
</services>
<extensions>
<!¡ªInstall Microsoft Service Bus NuGet

package will automatically add needed

all extensions -->
¡­¡­
</extensions>
</system.serviceModel>

 

string relaySvcAddress = "https://relaydemons.servicebus.chinacloudapi.

cn/httpdata";
WebServiceHost wsh = new WebServiceHost

(typeof(yourservice));
wsh.AddServiceEndpoint(
typeof(yourservice),
new WebHttpRelayBinding(
EndToEndWebHttpSecurityMode.Transport,
RelayClientAuthenticationType.RelayAccessToken),
relaySvcAddress)
.EndpointBehaviors.Add(new TransportClientEnd

pointBehavior
{
TokenProvider = TokenProvider.CreateSharedAccess

SignatureToken

Provider("listeningKey", "keyValue")
});

 

¿Í»§¶Ë

ÒòÎªÇ°Ãæ·þÎñ¶ËÅäÖÃΪ°²È«·ÃÎÊ·½Ê½£¬ËùÒÔ¿Í»§¶ËÐèÒªÌṩÕýÈ·ÁîÅÆ¡£ÄÇôÈçºÎÉú³ÉÁîÅÆÄØ£¿ÓÐÁ½ÖÖ·½Ê½£¬Ò»ÊÇÀûÓ÷þÎñ×ÜÏß°üÀïµÄÄÚÖ÷½·¨£¬¶þÊÇ×Ô¼ºÉú³É£¬Ç°ÕßÔö¼ÓÁ˶ԷþÎñ×ÜÏß°üµÄÒÀÀµÐÔ£¬µ«¼òµ¥·½±ã£¬ºóÕßÐèÒª¶Ô·þÎñ×ÜÏßÁîÅÆµÄÒªÇóÓÐÒ»¶¨µÄÁ˽⡣ÒÔÏÂÌṩÁ½ÖÖ·½Ê½µÄ´úÂëʾÀý¡£

ÀûÓ÷þÎñ×ÜÏß°üµÄÄÚÖ÷½·¨

var token = TokenProvider.CreateSharedAccessSignature

TokenProvider("keyname", "key").GetWebTokenAsync(resourceUri, string.Empty, true, TimeSpan.FromDays(7)).Result;

 

×Ô¼ºÉú³É

private string createToken(string resourceUri,

string keyName, string key)
{
TimeSpan sinceEpoch = DateTime.UtcNow - new

DateTime(1970, 1, 1);
var week = 60 * 60 * 24 * 7;
var expiry = Convert.ToString((int)sinceEpoch.

TotalSeconds + week);
string stringToSign = HttpUtility.UrlEncode

(resourceUri) + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.

GetBytes(key));
var signature = Convert.ToBase64String(hmac.

ComputeHash(Encoding.

UTF8.GetBytes(stringToSign)));
var sasToken = String.Format(CultureInfo.InvariantCulture,
"SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
HttpUtility.UrlEncode(resourceUri),
HttpUtility.UrlEncode(signature),
expiry,
keyName);
return sasToken;
}

 

ʾÀý´úÂëÖеÄresourceUri¾ÍÊÇÇ°Ãæ´´½¨µÄÖм̷þÎñµØÖ·£ºhttps:// relaydemons . servicebus . chinacloudapi . cn / httpdata

ÓÐÁËÁîÅÆºó£¬¾Í¿ÉÒÔʹÓÃHttp¿Í»§¶ËÀ´µ÷ÓÃÁË£¬±ÈÈçʹÓÃHttpClient¡£

string relaySvcAddress = "https://relaydemons.servicebus.chinacloudapi.

cn/httpdata";
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Add("Author

ization", token);
var requestUri = $"{relaySvcAddress}/youra

pimethod";
using (var response = httpClient.GetAsync

(requestUri).Result)
{
// handle response
}
}

 

Ìáʾ£ºÖ±½Ó°Ñ·þÎñ×ÜÏßµÄKeyÌṩÔÚ¿Í»§¶ËÊDz»°²È«µÄ£¬¿ÉÒÔÁíÍâÌṩһ¸öרÃÅÉú³ÉtokenµÄ·þÎñ£¬ÕâÑù¿Í»§¶Ë¾Í¿ÉÒÔÐèÒªµÄʱºò¾Í´ÓÄǸö·þÎñ»ñÈ¡token£¬¶ø²»ÊÇÖ±½ÓÄõ½Key×Ô¼ºÉú³É¡£

ʹÓÃIISÍйܷþÎñ

µ±±¾µØ·þÎñÊÇÓÃIISµÄ·½Ê½À´ÍйÜʱ£¬ÓÐÒ»¸öÌØ±ðÐèҪעÒâµÄµØ·½£¬IISÍйܵķþÎñÖ»ÓÐÔÚ½ÓÊܵ½ÇëÇóºó²Å»áÆô¶¯£¬ËùÒÔÈç¹ûÒ»¿ªÊ¼Ö±½Óµ÷ÓÃͨ¹ýÖм̹«¿ª³öÀ´µÄ·þÎñÊÇ»áʧ°ÜµÄ£¬ÒòΪ±¾µØÍйÜÔÚIISÀïµÄ·þÎñ»¹Ã»Æô¶¯£¬Ò²¾Í»¹Ã»ÓëÖм̷þÎñ½¨Á¢Á´½Ó£¬Òò´ËÐèҪһЩ¶îÍâµÄÅäÖÃÀ´Ô¤ÈÈ¡£ÄÇô¸ÃÈçºÎÅäÖÃÀ´Ô¤ÈÈÄØ£¿

¿ÉÒÔ°´ÕÕÒÔϲ½Öèͨ¹ýIISµÄ Application Initialization ¹¦ÄÜÀ´×öµ½£º

È·±£ Application Initialization ¹¦ÄÜÒѾ­°²×°¡££¨½ÇÉ« => Web Server (IIS) => Web Server => Application Development£©

ÉèÖÃwebÓ¦ÓöÔÓ¦µÄApplicationPoolÆô¶¯Ä£Ê½ÎªAlwaysRunning

ÉèÖÃwebÓ¦ÓÃPreload EnabledΪTrue

Ìí¼ÓÈçϳõʼҳÅäÖõ½webÓ¦ÓõÄweb.configÖУ¬Ò»°ã³õʼҳÉèÖÃΪ·ÃÎÊwcf svcÒ³Ãæ¼´¿É¡£

<system.webServer>
<applicationInitialization>
<add initializationPage="/WebDataService.svc"/>
</applicationInitialization>
</system.webServer>

 

ÕâÑùµÄ»°£¬¾ÍÏ൱ÓÚwebÓ¦Óò¿ÊðºÃÖ®ºó»áÂíÉÏ·ÃÎÊÅäÖúõijõʼҳÀ´½øÐÐÔ¤ÈÈ£¬´Ó¶øÓëService bus relay½¨Á¢ºÃÁ´½Ó£¬¿Í»§¶Ë¾Í¿ÉÒÔ·ÃÎÊÁË¡£Èç¹ûIISÖØÆôÒ²»áÖ´ÐÐÔ¤ÈȲÙ×÷ÒÔ±£Ö¤·þÎñµÄÔËÐС£

   
1870 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì