ʹÓÃ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ÖØÆôÒ²»áÖ´ÐÐÔ¤ÈȲÙ×÷ÒÔ±£Ö¤·þÎñµÄÔËÐС£ |