ÔÚwcf¼¯ÈºÖУ¬¸ßÐÔÄܵĹ¹¼ÜÖÐÒ»ÖÖ³£ÓõÄÊÖ·¨¾ÍÊÇÔÚÄÚ´æÖÐά»¤Ò»¸ö½Ð×ö¡°Ë÷Òý¡±µÄÄÚ´æÊý¾Ý¿â£¬ÔÚʵսÖÐÀûÓá°Ë÷Òý¡±Õâ¸ö¸ÅÄî×ö³ö¡°º£Á¿Êý¾ÝµÄ¡±Ãëɱ¡£
Ê×ÏÈ£¬ÏÈÉϼܹ¹Í¼£º

´óÌå½²½âϸÃϵͳÁ÷³Ì£»ËùνµÄSearch¼¯Èº¾ÍÊÇͼÖÐWCFÄ£¿é£¬Ëü·Ö²¼ÓÚ²»Í¬µÄ·þÎñÆ÷ÉÏ£¬ÎªÁËÌṩ¸ßЧÂʵÄÊý¾Ý¼ìË÷£¬ÎÒÃÇ·Ö²½Öè½øÐУº
1¡¢ÎÒÃǽ«Êý¾Ý¿âÖеÄÊý¾Ýͨ¹ý³ÌÐò¼ÓÔØµ½ÄÚ´æÊý¾Ý¿âÖÐ
2¡¢Í¨¹ý¸÷¸ö·þÎñÆ÷ÖеÄWCFSearch·þÎñΪIISÌṩÄÚ´æÊý¾ÝÖеÄÊý¾Ý¼ìË÷
3¡¢ÎªÁ˹ÜÀí²»Í¬·þÎñÆ÷ÖеÄWCFSearch·þÎñ£¬ÎÒÃÇÀûÓÃÁË¡°ÐÄÌø¼ì²â¡±£¬ÊµÏÖWCFSearchºÍIISµÄ´îÇŹ¤×÷
4¡¢ÔÚIISÖлñÈ¡Êý¾ÝË÷Òý£¬È»ºóÏò±¾µØÊý¾Ý¿âÖÐÌáÈ¡Êý¾Ý£¬ÊµÏÖ¿Í»§¶ËÊý¾ÝÌáÈ¡¡£
ÏÂÃæÖØµã·ÖÎöÕâÀïÃæµÄ¡°ÐÄÌø¼ì²â¡±µÄʵսÊÖ·¨£º
µÚÒ»²½£ºÏîĿ׼±¸£¬ÎªÁËÏÔʾ³ö¸Ãϵͳ¹¹¼ÜµÄÓÅÔ½ÐÔÎÒÃÇÏÈн¨Á¢¸öÊý¾Ý¿â£¬ÉÏͼ£º

ÀàËÆµç×ÓÉÌÎñÖеÄÓû§ºÍµêÆÌµÄ¹ØÏµ£¬Ò»¸öÓû§¿ÉÒÔ¿ª¶à¸öµê£º

ÎÒÃÇÏòÕâÁ½ÕűíÖвåÈëÊý¾Ý£¬²åÈë°ÙÍò¼¶±ðµÄÊý¾Ý£¬É¹ÏÂSQLÊý¾Ý£º
------------------------------------------------ declare @a int --¶¨Òå±äÁ¿ declare @m int
declare @ShopName char(50)
declare @ShopUrl nchar(50)
declare @UserName nchar(50)
declare @Password nchar(50)
set @a=0 --³õʼֵ
set @m=0
set @ShopName='ÌÔ±¦µê'
set @ShopUrl='www.baidu.com'
set @UserName='СÎâ'
set @Password='110'
while @a<=1800000 ---Ñ»·²åÈëUser±í180WÊý¾Ý
begin
insert into [User] (UserName,Passwrod) values
(@UserName,@Password)
declare @UserID int
set @UserID=(select @@identity)
while @m<=10
begin
insert into dbo.Shop (UserID,ShopName,ShopUrl,User_UserID)
values (@UserID,@ShopName,@ShopUrl,null)
set @m=@m+1
continue
end
set @m=0 --ÄÚÑ»·ÖØÖÃΪ0
set @a=@a+1
continue
end
---------------------------------------------------------
select * from Shop
select * from [User]
delete from Shop
delete from [User]
truncate table Shop --ÖØÖÃShop±êʶÁÐ
dbcc checkident('[User]',reseed,1) ---ÖØÖñêʶÁÐ
---------------------------------------------------------- |
ÖÁ´Ë£¬Êý¾Ý¿âÒѾ׼±¸Íê±Ï£¬ÎÒÃÇ¿ªÊ¼½¨Á¢ÏîÄ¿¡£
µÚ¶þ²½£ºÏÈɹÏîÄ¿½á¹¹£º

µÚÈý²½£ºÏȽâÎöLoadDBServiceÏîÄ¿£¬¸ÃÏîĿʵÏÖµÄÊÇÊý¾Ý¿âÄÚÈݵļÓÔØ£¬²»·Ï»°£¬É¹´úÂ룺
/** *ÐÄÌø¼ì²â»úÖÆ *Ä£ÄâÊý¾Ý¿â¼ÓÔØµ½ÄÚ´æÖУ¬ÐγÉÄÚ´æÖеÄÊý¾Ý¿â */ namespace xinTiaoTest { class Program { static void Main(string[] args) { //ÕâÀïµÄDicionaryÓÃÀ´±íʾ¡°Ò»¸ö×¢²áÓû§ÓùýÁ˶àÉÙ¸öµêÆÌ¡±£¬¼´UserIDºÍShopIDµÄÒ»¶Ô¶à¹ØÏµ SerializableDictionary<int, List<int>> dic = new SerializableDictionary<int, List<int>>(); List<int> shopIDList = new List<int>(); for (int shopID = 3000; shopID < 3050; shopID++) { shopIDList.Add(shopID);
}
int UserID = 15;
//¼ÙÉèÕâÀïÒѾά»¤ÁËUserIDÓëshopIDµÄ¹ØÏµ
dic.Add(UserID, shopIDList);
XmlSerializer xml = new XmlSerializer(dic.GetType());
var memoryStrean = new MemoryStream();
xml.Serialize(memoryStrean, dic);//½«dic¶ÔÏóдÈëIDÁ÷
memoryStrean.Seek(0, SeekOrigin.Begin); //´Ó0¿ªÊ¼¶ÁÈ¡
//½«Dicrionary³Ö¾Ã»¯£¬Ï൱ÓÚÄ£Äâ±£´æÔÚMencacheÀïÃæ
File.AppendAllText("E://1.txt", Encoding.UTF8.GetString(memoryStrean.ToArray()));
Console.WriteLine("½«Êý¾Ý¼ÓÔØ³É¹¦");
Console.Read();
}
}
}
|
ΪÁËÐòÁл¯ListÁÐ±í£¬ÎÒÃÇÒýÈëÁ˸ÃÀàµÄÐòÁл¯£º
///<summary> ///13 /// ±êÌ⣺֧³Ö XML ÐòÁл¯µÄ Dictionary ///</summary> ///<typeparam name="TKey"></typeparam> ///16 ///<typeparam name="TValue"></typeparam> [XmlRoot("SerializableDictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public SerializableDictionary() : base() {
}
public SerializableDictionary(IDictionary<TKey,
TValue> dictionary)
: base(dictionary)
{
}
public SerializableDictionary(IEqualityComparer<TKey>
comparer)
: base(comparer)
{
}
public SerializableDictionary(int capacity)
: base(capacity)
{
}
public SerializableDictionary(int capacity, IEqualityComparer<TKey>
comparer)
: base(capacity, comparer)
{
}
protected SerializableDictionary(SerializationInfo
info, StreamingContext context)
: base(info, context)
{
}
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
///<summary> 54 /// ´Ó¶ÔÏóµÄ XML ±íʾÐÎʽÉú³É¸Ã¶ÔÏó 55
///</summary>
///56 ///<param name="reader"></param>
public void ReadXml(System.Xml.XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
bool wasEmpty = reader.IsEmptyElement; reader.Read();
if (wasEmpty)
return;
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
TKey key = (TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
TValue value = (TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
this.Add(key, value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
/**/
///<summary> 83 /// ½«¶ÔÏóת»»ÎªÆä XML ±íʾÐÎʽ
///84 ///</summary> 85 ///<param name="writer"></param>
86
public void WriteXml(System.Xml.XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
foreach (TKey key in this.Keys)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();
writer.WriteStartElement("value");
TValue value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
}
}
|
ÕâÑùÎÒÃǾÍʵÏÖÁËÊý¾Ý¿âÖÐË÷Òý±£´æÎªÄÚ´æÊý¾Ý¿âÖе쬵±È»ÎªÁËÑÝʾÎÒÃǽ«Æä³Ö¾Ã»¯£¬Áí´æÎªtxtÎļþ¡£
µÚËIJ½£ºÐ½¨WCFSearch,ÓÃÓÚ´ÓÄÚ´æÊý¾ÝÖжÁÈ¡Ë÷Òý£¬ÎªIISÌṩ·þÎñ,²»·Ï»°£¬É¹´úÂ룺
namespace SearhService { // ×¢Òâ: ʹÓá°Öع¹¡±²Ëµ¥Éϵġ°ÖØÃüÃû¡±ÃüÁ¿ÉÒÔͬʱ¸ü¸Ä´úÂëºÍÅäÖÃÎļþÖеĽӿÚÃû¡°IIProduct¡±¡£ [ServiceContract] public interface IProduct { [OperationContract] List<int> GetShopListByUserID(int userID); [OperationContract] void TestSrarch(); } }
|
ʵÏÖ·½·¨£º
namespace SearhService { // ×¢Òâ: ʹÓá°Öع¹¡±²Ëµ¥Éϵġ°ÖØÃüÃû¡±ÃüÁ¿ÉÒÔͬʱ¸ü¸Ä´úÂëºÍÅäÖÃÎļþÖеÄÀàÃû¡°IProduct¡±¡£ public class Product : IProduct { public List<int> GetShopListByUserID(int userID) { //Ä£Äâ´ÓMemcacheÖжÁÈ¡Ë÷Òý SerializableDictionary<int, List<int>> dic = new SerializableDictionary<int, List<int>>(); byte[] bytes = Encoding.UTF8.GetBytes(File.ReadAllText("E://1.txt", Encoding.UTF8)); var memoryStream = new MemoryStream(); //н¨»º´æÇøÓò memoryStream.Write(bytes, 0, bytes.Count()); //ʹÓôӻº³åÇø¶ÁÈ¡µÄÊý¾Ý½«×Ö½Ú¿éдÈ뵱ǰÁ÷¡£ memoryStream.Seek(0, SeekOrigin.Begin);
XmlSerializer xml = new XmlSerializer(dic.GetType());
var obj = xml.Deserialize(memoryStream) as Dictionary<int,
List<int>>; //·´ÐòÁл¯Éú³É¶ÔÏó
return obj[userID];
}
public void TestSrarch()
{
throw new NotImplementedException();
}
}
}
|
·¢²¼·þÎñ£º
namespace SearhService { public class SearchHost : ServiceHeartBeat.IAddressCallback {
static DateTime startTime;
public static void Main()
{
ServiceHost host = new ServiceHost(typeof(Product));
host.Open();
AddSearch();
Console.Read();
}
private static void AddSearch()
{
startTime = DateTime.Now;
Console.WriteLine("Search·þÎñ·¢ËÍÖÐ.....\n\n*************************************************\n");
try
{
var heartClient = new ServiceHeartBeat.AddressClient(new
InstanceContext(new SearchHost()));
string search = ConfigurationManager.AppSettings["search"];
//»ñÈ¡ÅäÖõı¾»úserviceµØÖ·
heartClient.AddSearch(search); //Ìí¼Óµ½Á¬½Ó¡£
}
catch (Exception err)
{
Console.WriteLine("Search·þÎñ·¢ËÍʧ°Ü£º" +
err.Message);
}
}
//·þÎñ¶Ë»Øµ÷º¯Êý
public void LiveAddress(string address)
{
Console.WriteLine("¹§Ï²Ä㣬"+address+"ÒѾ±»ÐÄÌø³É¹¦½ÓÊÜ");
Console.WriteLine("·¢ËÍʱ¼ä£º"+startTime+"\n½ÓÊÕʱ¼ä£º"+DateTime.Now.ToString());
}
}
} |
ÕâÀïÓм¸¸öµãÐèҪעÒ⣬ÔÚÎÒÃÇÊ×ÏÈÒªÒýÓá°ÐÄÌø·þÎñ¡±£¬È»ºó½«×Ô¼ºµÄ·¢²¼µÄ·þÎñµØÖ··¢Ë͸ø"ÐÄÌø·þÎñ¡°£¬ÔÚ³ÌÐòÖÐÒ²¾ÍÊÇʵÏÖ
ServiceHeartBeat.IAddressCallback½Ó¿Ú£¬ÕâÊÇÒ»¸ö¡±ÐÄÌø¼ì²â¡°ÖÐÉèÖõÄÒ»¸ö»Øµ÷½Ó¿Ú£¬Ä¿µÄÊÇʵÏÖ¸æËßSearch£¬ÎÒÒѾ½ÓÊÜÁËÄãµÄ·þÎñ£¬ÊµÏÖÊý¾ÝµÄÍÆËÍ....
ÏÂÃæÊǸ÷þÎñµÄÅäÖÃÎļþ£º
<?xml version="1.0"?> <configuration>
<!--ÉèÖñ¾serviceµÄµØÖ·--> <appSettings> <add key="search" value="net.tcp://localhost:8732/Design_Time_Addresses/SearhService/IProduct/"/> </appSettings>
<system.serviceModel>
<!--Ìí¼Ó·þÎñÒýÓÃÉú³ÉµÄ¿Í»§¶ËµÄÅäÖÃ×ÊÁÏ --> <bindings> <netTcpBinding> <binding name="NetTcpBinding_IAddress" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<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:8888/Heart"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IAddress"
contract="ServiceHeartBeat.IAddress" name="NetTcpBinding_IAddress"> <identity> <dns value="localhost"/> </identity> </endpoint> </client>
<!--End Ìí¼Ó·þÎñÒýÓÃÉú³ÉµÄ¿Í»§¶ËµÄÅäÖÃ×ÊÁÏ --> <!--Ìí¼Ó±¾»ú·þÎñÅäÖà --> <behaviors> <serviceBehaviors> <behavior name="IProductBehavior"> <serviceMetadata httpGetEnabled="false"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors><services> <service behaviorConfiguration="IProductBehavior" name="SearhService.Product"> <endpoint address="" binding="netTcpBinding" contract="SearhService.IProduct"> <identity> <dns value="localhost"/> </identity> </endpoint> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/SearhService/IProduct/"/> </baseAddresses> </host> </service> </services> </system.serviceModel> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
|
ÕâÀïÃæÓиö¼¼ÇÉÊÇÔÚÎÒÃÇÔÚvs2010ÖÐн¨·þÎñʱ£¬Ìí¼ÓµÄ·þÎñµØÖ·ÀïÃæ°üº¬Design_Time_Addresses·¾¶£¬Õâ¸öÊÇvsÔÚ°²×°µÄʱºò×Ô¼º×¢²áµÄÒ»¸ö°²È«ÅäÖã¬Ò²¾ÍÊÇ˵ÔÚÕâÀïÃæÆÕͨµÄµÄÓû§¾ÍÄܹ»·¢²¼·þÎñ..ΪÁËÄÜ·¢²¼ÈκηþÎñ£¬ÎÒÃÇÔÚÔËÐÐvs2010µÄʱºòҪѡÔñ¡°¹ÜÀíԱȨÏÞ¡±ÔËÐС£
µÚÎå²½£ºÐ½¨ClientServiceÏîÄ¿£¬¸ÃÏîÄ¿´ú±íµÄÊÇIIS¶Ë£¬ÊµÏÖµÄÊÇ´ÓÄÚ´æÊý¾Ý¿âÖлñÈ¡Ë÷ÒýÖµ£¬Ò²¾ÍÊÇÁ¬½ÓSrerch,·Ï»°²»¶à˵£¬ÉÏ´úÂ룺
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel;
namespace ClientService { [ServiceContract] public interface IServiceList { [OperationContract] void AddSearchList(List<string> search); } }
|
Ìṩһ¸öAddSearchList·½·¨£¬Ä¿µÄÊÇÈá°ÐÄÌø¼ì²â¡±ÏòIIS¶Ë·¢ËÍSearchµÄµØÖ·¡£
ʵÏÖ´úÂëΪ£º
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;
namespace ClientService { public class ServiceList : IServiceList { public static List<string> serarchilist = new List<string>(); static object obj = new object(); public static string Search { get { //Èç¹ûÐÄÌøÃ»¼°Ê±·µ»ØµØÖ·£¬¿Í»§¶Ë¾ÍÔڵȺò,Èç¹ûÓеϰ£¬¾ÍËæ»ú»ñÈ¡ÆäµØÖ· while (serarchilist.Count == 0) { Thread.Sleep(1000); } return serarchilist[new Random().Next(0, serarchilist.Count)];
} set { } } public void AddSearchList(List<string> search) { lock (obj) { serarchilist = search; Console.WriteLine("ÐÄÌø·¢À´searcheÐÅÏ¢************************************"); Console.WriteLine("µ±Ç°´æ»îµÄsearchΪ£º"); foreach (var single in serarchilist) { Console.WriteLine(single); } } } } } |
ÅäÖ÷þÎñ£¬·¢²¼·þÎñ
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.Configuration; using SearhService; using Common; namespace ClientService { class Program:ServiceHeartBeat.IAddressCallback { static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(ServiceList)); host.Opened += delegate { Console.WriteLine("IIS·þÎñÒѾÆô¶¯"); }; host.Open();
//ÏòÐÄÌøÌí¼ÓÁ´½Ó£¬»ñÈ¡service¡£¡£ var client = new ServiceHeartBeat.AddressClient(new InstanceContext(new Program())); //»ñÈ¡ÅäÖÃÎļþÖеĻñÈ¡IISµÄµØÖ· var iis = ConfigurationManager.AppSettings["iis"]; //·¢ËÍIISµØÖ·¸øÐÄÌø client.GetService(iis);
//´Ó¼¯ÈºÖлñÈ¡searchµØÖ·À´¶Ôsearch·þÎñ½øÐе÷Óà var factory = new ChannelFactory<SearhService.IProduct>
(new NetTcpBinding(SecurityMode.None), new EndpointAddress(ServiceList.Search)); //¸ù¾ÝuserID»ñÈ¡ÁËshopIdµÄ¼¯ºÏ //±ÈÈç˵ÕâÀïµÄShopIDListÊÇͨ¹ýË÷Òý½»²¢¼¯»ñÈ¡·ÖÒ³µÄһЩshopID var shopIDList = factory.CreateChannel().GetShopListByUserID(15);
var strSql = string.Join(",", shopIDList); System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); //¶¨Òåʱ¼ä¼ì²âÁ¿
watch.Start(); SqlHelper.Query("select s.ShopID,u.UserName,s.ShopName from [User] as u ,
Shop as s where s.ShopID in(" + strSql + ")"); watch.Stop();//Í£Ö¹¼ì²â Console.WriteLine("ͨ¹ýwcfË÷Òý»ñÈ¡µÄID>>>>>»¨·Ñʱ¼ä:" + watch.ElapsedMilliseconds);
//ÆÕͨµÄsql²éѯ»¨·ÑµÄʱ¼ä StringBuilder builder = new StringBuilder(); builder.Append("select * from "); builder.Append("(select ROW_NUMBER() over(order by s.ShopID) as NumberID, "); builder.Append(" s.ShopID, u.UserName, s.ShopName "); builder.Append("from Shop s left join [User] as u on u.UserID=s.UserID "); builder.Append("where s.UserID=15) as array "); builder.Append("where NumberID>300000 and NumberID<300050"); watch.Start(); SqlHelper.Query(builder.ToString()); watch.Stop(); Console.WriteLine("ÆÕͨµÄsql·ÖÒ³ >>>»¨·Ñʱ¼ä:" + watch.ElapsedMilliseconds); Console.Read(); } public void LiveAddress(string address) { Console.WriteLine("ÐÄÌø¼ì²âµ½ÁËÄãµÄIISµØÖ·Îª£º" + address ); Console.WriteLine("\n½ÓÊÕʱ¼ä£º" + DateTime.Now.ToString()); } } } |
ͬÑùµÄʵÏÖServiceHeartBeat.IAddressCallback£¬¡°ÐÄÌø¼ì²â¡±ËæÊ±µÄ¸æËßIIS£¬ÒѾÁ¬½ÓµÄSearchService,µ±È»ÔÚÀïÃæÔÚ»ñµÃÁËSearchServiceµÄʱºòÎÒÃÇ¶ÔÆä½øÐÐÁËÁ¬½Ó£¬È»ºó½øÐÐÁËË÷ÒýµÄ²éѯ...ÏÂÃæµÄÄÚÈÝÊÇΪÁ˱ȽÏÕâÖÖ·½·¨µÄËÙ¶ÈÈçºÎ£¬ÉÔºóɹ²âÊÔ½á¹û¡£
ÏÂÃæÊǸ÷þÎñµÄÅäÖÃÎļþ£º
<?xml version="1.0"?> <configuration> <appSettings> <add key="iis" value="net.tcp://localhost:2345/ServiceList"/> </appSettings> <system.serviceModel> <client> <endpoint address="net.tcp://localhost:8888/Heart" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IAddress" contract="ServiceHeartBeat.IAddress" name="NetTcpBinding_IAddress"> <identity> <dns value="localhost" /> </identity> </endpoint> </client> <bindings> <netTcpBinding> <!--¿Í»§¶ËÑé֤ģʽΪ¿Õ--> <binding name="ClientBinding"> <security mode="None" /> </binding> <binding name="NetTcpBinding_IAddress" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536"> <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> <!--¶¨Òåbehaviors--> <behaviors> <serviceBehaviors> <behavior name="IProductBehavior"> <serviceMetadata httpGetEnabled="false"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors>
<services> <service name="ClientService.ServiceList"> <endpoint address="net.tcp://localhost:2345/ServiceList" binding="netTcpBinding" contract="ClientService.IServiceList" bindingConfiguration="ClientBinding"> <identity> <dns value="localhost" /> </identity> </endpoint> </service> </services>
</system.serviceModel> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration> |
ÕâÀïÃæµÄ¼¸¸ö¼òµ¥µÄÅäÖÃÐèÌáÐÑ£¬Ïñ¿Í»§¶ËÑé֤ģʽһ¶¨ÒªÆ¥Å䣬µ±È»ÔÚ¸ÃÏîÄ¿ÖÐÎÒÃÇ×öÁ˼òµ¥µÄÅäÖã¬ÔÚʵ¼ÊÓ¦ÓÃÖÐÎÒÃÇ»á¶ÔÆä×÷½øÒ»²½ÏêϸÅäÖã¬ÒÔÈ·±£·þÎñµÄÁ÷³©ÐÔ¡£
µÚÁù²½£ºÕâʱºò¸ÃÎÒÃǵÄÖØÍ·Ï·³ö³¡ÁË..ÐÄÌø¼ì²âµÄµÄÏîÄ¿£¬ÊµÏÖÁ½ÕߵĻ¥Áª£¬ÉÏ´úÂ룺
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel;
namespace HeartBeatService { //callbackContract:Õâ¸ö¾ÍÊÇClientʵÏֻص÷½Ó¿Ú£¬·½±ã·þÎñÆ÷֪ͨ¿Í»§¶Ë [ServiceContract(CallbackContract = typeof(ILiveAddressCallback))] public interface IAddress { //´Ë·½·¨ÓÃÓÚSearch·½·¨Æô¶¯ºó£¬½«SearchµØÖ·²åÈë´Ë´¦ [OperationContract(IsOneWay=true)] void AddSearch(string address); //´Ë·½·¨ÓÃÓÚIIS»ñÈ¡SearchµØÖ· [OperationContract(IsOneWay=true)] void GetService(string address); }
}
|
Á½¸ö·½·¨£¬µÚÒ»¸öʵÏÖSearchµØÖ·µÄ»ñÈ¡£¬µÚ¶þ¸öʵÏÖIISµÄ¼ì²â£¬ÉÏÃæ¼ÓÁËÒ»¸ö»Øµ÷½Ó¿Ú£ºILiveAddressCallback·½·¨£¬ÊµÏÖµÄÊǿͻ§¶ËÊý¾ÝµÄÓ¦´ð¡£·½·¨ÈçÏ£º
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel;
namespace HeartBeatService { ///<summary>10 /// µÈ¿Í»§¶ËʵÏÖºó£¬Èÿͻ§¶ËÔ¼ÊøÒ»Ï ///£¬Ö»ÄÜÊÇÕâ¸öLiveAddress·½·¨11 ///</summary> public interface ILiveAddressCallback
{ [OperationContract(IsOneWay = true)] void LiveAddress(string address); } } |
ÏÂÃæÊÇÐÄÌø¼ì²âµÄºËÐÄ´úÂ룬ÉÏ´úÂ룺
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.Timers; using System.Configuration; using SearhService; using ClientService;
namespace HeartBeatService { //InstanceContextMode:Ö»ÒªÊǹÜÀíÉÏÏÂÎĵÄʵÀý£¬´Ë´¦ÊÇsingle,Ò²¾ÍÊǵ¥Ìå //ConcurrencyMode:Ö÷ÒªÊÇÓÃÀ´¿ØÖÆÊµÀýÖеÄÏß³ÌÊý£¬´Ë´¦ÊÇMultiple,Ò²¾ÍÊǶàÏß³Ì
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Address : IAddress {
tatic List<string> search = new List<string>(); static object obj = new object();
//¹¹Ô캯ÊýÓÃÀ´¼ì²âSearchµÄ¸öÊý static Address() { Timer timer = new Timer(); timer.Interval = 6000; timer.Elapsed += (sender, e) => {
Console.WriteLine("\n¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·"); Console.WriteLine("µ±Ç°´æ»îµÄsearchΪ£º");
lock (obj) { //±éÀúµ±Ç°´æ»îµÄsearch foreach (var single in search) { ChannelFactory<IProduct> factory = null; try {
//µ±search´æ»îµÄ»°£¬ÐÄÌø·þÎñ¾ÍÒª¼ì²âsearchÊÇ·ñËÀµô£¬Ò²¾ÍÊǶ¨Ê±¼ì²âÁ¬½ÓSearchÀ´¼ì²â factory = new ChannelFactory<IProduct>(new
NetTcpBinding(SecurityMode.None), new EndpointAddress(single)); factory.CreateChannel(); factory.Close();
Console.WriteLine(single); } catch (Exception err) { Console.WriteLine(err.Message);
//Èç¹ûÅ׳öÒì³££¬Ôò˵Ã÷´ËsearchÒѾ¹Òµô search.Remove(single); factory.Abort(); Console.WriteLine("\nµ±ÆÚʱ¼ä£º" + DateTime.Now + ",´æ»îµÄsearchÓУº" + search.Count() + "¸ö");
} } //×îºóͳ¼ÆÏ´æ»îµÄsearchÓжàÉÙ¸ö Console.WriteLine("\nµ±Ç°Ê±¼ä£º" + DateTime.Now + " ,´æ»îµÄSearchÓУº" + search.Count() + "¸ö");
} }; imer.Start();
} public void AddSearch(string address) { lock (obj) { //ÊÇ·ñ°üº¬ÏàͬµÄSearchµØÖ·
if (!search.Contains(address)) { search.Add(address); //searchÌí¼Ó³É¹¦ºó¾ÍÒª¸æËßÀ´Ô´´¦£¬´ËsearchÒѾ±»³É¹¦ÔØÈë¡£
var client = OperationContext.Current.GetCallbackChannel<ILiveAddressCallback>(); client.LiveAddress(address);
} } }
public void GetService(string address) { Timer timer = new Timer(); timer.Interval = 1000; timer.Elapsed += (obj, sender) => { try {
//Õâ¸öÊǶ¨Ê±µÄ¼ì²âIISÊÇ·ñ¹Òµô var factory = new ChannelFactory<IServiceList>(new NetTcpBinding(SecurityMode.None),
new EndpointAddress(address)); factory.Opened += delegate {
Console.WriteLine("IIS("+address+")ÒѾÆô¶¯..ÕýÔÚ·¢ËÍsearchSeriveµØÖ·..."); }; factory.CreateChannel().AddSearchList(search); factory.Close();
timer.Interval = 20000; } catch (Exception ex) { Console.WriteLine(ex.Message); } }; timer.Start(); } } } |
Ϊȷ±£²»¶ªµôÈκεÄSearch·þÎñ£¬ÎÒÃDzÉÓöàỊ̈߳¬InstanceContextMode:Ö»ÒªÊǹÜÀíÉÏÏÂÎĵÄʵÀý£¬´Ë´¦ÊÇsingle,Ò²¾ÍÊǵ¥Ìå
ConcurrencyMode:Ö÷ÒªÊÇÓÃÀ´¿ØÖÆÊµÀýÖеÄÏß³ÌÊý£¬´Ë´¦ÊÇMultiple,Ò²¾ÍÊǶàÏ̡߳£
1¡¢¹¹Ô캯ÊýµÄ¾²Ì¬·½·¨ÊµÏÖµ±Ç°·þÎñµÄ¼ì²âºÍÏÔʾ£¬²ÉÓÃTimer¶¨Ê±¼ì²â...
2¡¢AddSearch·½·¨ÊµÏÖSearchµÄÌí¼Ó,²¢»Ø¸´¿Í»§¶Ë
3¡¢GetService·½·¨ÊµÏÖµÄÊǼì²âIISÊÇ·ñµÈ´ýÁ¬½Ó£¬²¢ÇÒ½«Search¼¯ºÏ·¢Ë͸øËü,ͬÑùÊǶ¨Ê±·¢ËÍ¡£
ÏÂÃæÉ¹ÅäÖÃÎļþ£º
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true"/> </system.web> <!-- ²¿Êð·þÎñ¿âÏîĿʱ£¬±ØÐ뽫ÅäÖÃÎļþµÄÄÚÈÝÌí¼Óµ½ Ö÷»úµÄ app.config ÎļþÖС£System.Configuration ²»Ö§³Ö¿âµÄÅäÖÃÎļþ¡£--> <system.serviceModel> <services> <service name="HeartBeatService.Address" behaviorConfiguration="myBehavior"> <endpoint address="net.tcp://localhost:8888/Heart" binding="netTcpBinding" contract="HeartBeatService.IAddress"> <identity> <dns value="localhost"/> </identity> </endpoint> <!--¶¨ÒåÒýÓõØÖ·ÔªÊý¾ÝµÄ½ÓÊÜ·½Ê½£¬´Ë´¦»ùµØÖ·£¨baseAddress£©
¶¨ÒåµÄÐÒéHttpËùÒÔbindingͬÑùΪmexHttpBinding·½Ê½--> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="http://localhost:9999/Heart"/> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="myBehavior"> <!-- Ϊ±ÜÃâй©ԪÊý¾ÝÐÅÏ¢£¬ÇëÔÚ²¿Êðǰ½«ÒÔÏÂÖµÉèÖÃΪ false ²¢É¾³ýÉÏÃæµÄÔªÊý¾ÝÖÕ½áµã --> <serviceMetadata httpGetEnabled="True"/> <!-- Òª½ÓÊÕ¹ÊÕÏÒì³£ÏêϸÐÅÏ¢ÒÔ½øÐе÷ÊÔ£¬Ç뽫ÒÔÏÂÖµÉèÖÃΪ true¡£
ÔÚ²¿ÊðǰÉèÖÃΪ false ÒÔ±ÜÃâй©Òì³£ÐÅÏ¢--> <serviceDebug includeExceptionDetailInFaults="False"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> |
ÖÁ´Ë£¬ÎÒÃÇÒѾ³É¹¦Ë³ÀûµÄ´î½¨ÍêÐÄÌø¼ì²âµÄÁ÷³Ì£¬ÎÒÃÇÏÈÔËÐÐÏ¡°ÐÄÌø¡±ÏîÄ¿£¬Ëü½«µÈ´ýSearch·¢ËÍÁ¬½Ó¹ýÀ´£¬²¢¼ì²éIISʱºòµÈºò״̬...

È»ºóÎÒÃÇÔÙÔËÐÐSearch...Ïò¡°ÐÄÌø¡±Å׳öéÏéÖ¦...

ºÙºÙ£¬Á½ÕßÒѾ˳ÀûÎÕÊÖ...ÏÂÃæÔÛ°ÑIISÆô¶¯,¿´¿´¡°ÐÄÌø¼ì²â¡±ÊÇ·ñÄܽ«Õâ¸öSearchService·¢Ë͸øËü£º

ͬÑù³É¹¦£¬Õâ˵Ã÷ÎÒÃǵÄÐÄÌø·þÎñ»¹ÊÇÄÜʵʱµÄΪIISÌṩÁ¬½ÓµØÖ·µÄ..
ºÃ£¬ÏÂÃæÎÒÃDzâÊԸÿò¼ÜÐÔÄÜÈçºÎ£¬Ê×ÏÈÎÒÃÇÖ´ÐÐLoadDBService£¬½«Êý¾Ý¿â¼ÓÔØµ½ÄÚ´æÖÐ...½á¹ûÈçÏ£º

ÎÒÃÇÓøÿò¼Ü²âÊÔÏÂËÙ¶ÈºÍÆÕͨµÄ²éѯ·½Ê½½øÐбȽϣº
ÏÈɹSQLÓï¾ä£¬¿´Á½Õß²î¾àÐÔ£º
select * from ( select ROW_NUMBER() over(order by s.ShopID) as NumberID, s.ShopID, u.UserName, s.ShopName from Shop s left join [User] u on u.UserID=s.UserID where s.UserID=150 ) as array where NumberID>0 and NumberID<50 -------------------·ÖÒ³²éѯ------------------------- select s.ShopID,u.UserName,s.ShopName from [User] as u , Shop as s where s.ShopID in(100,200,3000,5000,4000,201) select * from shop select * from [user] |
ÎÒÃÇÔÚIIS¶Ë½øÐмÓÔØ¼ì²â£º

ɹÔËÐнá¹û£º
ÌáʾÁËÒ»¸ö´íÎó£º

ÎÒÃǽ«´Ë·þÎñµÄÁ¬½Óʱ¼ä¸ÃµÄ³¤Ò»µã£º

Õâ¸ö´íÎóÊÇÒòΪºÍ¿Í»§¶ËÑé֤ģʽ²»¶Ô£¬ÎÒÃÇÔÚÕâÀïÃæ×öÁËÉèÖ㬽«ÆäÉèÖÃΪNone£¬ÎªÁËÈ·±£´ÓÄÚ´æÊý¾Ý¿âÖжÁÈ¡Íê±Ï£¬ÎÒÃǽ«Ó¦´ðʱ¼ä¸ÃµÄÉÔ³¤µã¡£ÎÒÃÇÏÂÃæÉ¹½á¹û£º

ÕâÀï¿´Ñù×ÓÒ²¿ì²»Á˶àÉÙ£¬ÄÇÊÇÒòΪÎÒÃÇÔÚwcfÀï²éѯµÄÌõÊýÉèÖúÍSQLÀïÃæµÄÓï·¨²éѯÌõÊý²»Í¬£¬ÎÒÃǽ«¸Äһϣ¬»¹ÓоÍÊÇÔÚ´Ë·þÎñÒÑÓÐÒ»¸ö£¬²¢ÇÒÄÚ´æÊý¾Ý¿âʵÏֵķ½Ê½ÊÇͨ¹ý±¾µØ»¯Îļþ²Ù×÷£¬ºÜÏÔÈ»ÊÇ·Ñʱ·ÑÁ¦µÄ¹¤×÷£¬¾ÍÐÔÄܾù̯£¬¿ÉÀ©Õ¹ÐԵȷ½Ã棬ÎÞÒɸÿò¼ÜÊÇÀûÆ÷...ºÃÁËÏȽâÎöµ½´Ë..
|