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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
wcf·Ö²¼Ê½¹¹¼Ü¼¯Èº°¸Àý½â¾ö·½°¸
 
×÷ÕߣºÖ¸¼âÁ÷ÌÊ À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ£º2016-1-29
  5236  次浏览      27
 

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

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

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

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

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹