Я пытаюсь вызвать WCF
Сервис, как вы можете видеть здесь:
[ServiceBehavior(UseSynchronizationContext = false,ConcurrencyMode =ConcurrencyMode.Multiple)]
public class InquiryService : IInquiryService
{
private DataContext _ctx;
private IUserService _userService;
public InquiryService(DataContext ctx, INajaService najaService, IUserService userService)
{
_ctx = ctx;
_userService = userService;
}
public Inquiryview Inquiry(string VisitDatetime, string Plaque)
{
My service !!!!!
}
}
WCF webconfig
:
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />
Вот моя многопоточная программа для вызова сервиса:
private async void btnStart_Click(object sender, RoutedEventArgs e)
{
btnStart.Content = "Please Wait...";
btnStart.IsEnabled = false;
await Task.Run(() =>
{
InquiryService service = new InquiryService();
FinalList = new List<FinalData>();
var items = Data.GetData(from, to).AsEnumerable();
start = DateTime.Now;
Parallel.ForEach(items, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, item =>
{
string plaque = Plaque.GeneratePlaque(item.palll);
var result = service.Inquiry(plaque);
string serializedResult = new JavaScriptSerializer().Serialize(result);
FinalData finalData = new FinalData()
{
date = result.StartDate,
enddate = result.EndDate,
log = serializedResult,
plaque = plaque
};
lock (FinalList)
{
FinalList.Add(finalData);
lock (lblCount)
{
Dispatcher.Invoke(() =>
{
lblCount.Content = FinalList.Count;
});
}
}
plaque = null;
});
end = DateTime.Now;
duration = end - start;
Dispatcher.Invoke(() =>
{
btnStart.Content = "Insert Data...";
});
Data.InsertData(FinalList);
});
btnStart.Content = "Start";
btnStart.IsEnabled = true;
MessageBox.Show("Service Response Time = " + duration.ToString());
}
Класс, который вызывает службу:
частный MemoryStream ms;
приватная статическая строка только для чтения ServiceHostName = "https://****.muservice.ir/InquiryService.svc";
public InquiryService()
{
ms = new MemoryStream();
}
public Result Inquiry(string Plaque)
{
string result_ = "";
ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; };
DateTime start;
DateTime end;
using (var ClientRequest = new WebClient())
{
ClientRequest.Headers["Content-type"] = "application/json";
ClientRequest.Encoding = Encoding.UTF8;
NetworkCredential credential1 = new NetworkCredential("1", "1");
ClientRequest.Credentials = credential1;
start = DateTime.Now;
result_ = ClientRequest.
(ServiceHostName + "/Inquiry/2012-12-28" + "/" + Plaque);
end = DateTime.Now;
}
var javascriptserializer = new JavaScriptSerializer();
Result temp = javascriptserializer.Deserialize<Result>(result_);
temp.StartDate = start;
temp.EndDate = end;
return temp;
}
После запуска программа правильно вызывает службу (около 100 мс), но после примерно 1000 запросов время моего запроса увеличивается до (8 секунд).
Я хочу знать, должен ли я что-то изменить?