, пожалуйста, дайте мне несколько советов.
Я искал сотни ее вопросов на форуме, но я не смог добиться того, чего хочу.У меня есть веб-приложение с файлом .svc, которое связано с Wfc srevice.У меня также есть тестовый клиент, который общается с сервисом.Вот изображение проектов и IIS: http://shrani.si/f/g/eG/4zKyZUj1/wcfsolutions.jpg
Проекты сохраняются непосредственно в Inetpub / wwwRoot.Я размещаю это в IIS 7.5.Все это работает, но только если я запускаю веб-приложение хостинга в visual studio.Таким образом, служба запускается в области уведомлений Windows, и я могу общаться между службой и клиентским приложением.
Мне бы хотелось, чтобы, когда клиент создавал прокси-сервер и вызывал службу, служба wcf запускалась по требованию.Поэтому мне не нужно устанавливать Visual Studio на моем сервере, если я хочу запустить сервис.Это возможно?Как люди делают это на практике?
Я также пытаюсь разместить в WAS и следовать этим инструкциям http://msdn.microsoft.com/en-us/magazine/cc163357.aspx,, но безуспешно.
Часть моего кода:
РЕШЕНИЕ ДЛЯ ХОСТИНГА (3 проекта)
1) ПРОЕКТ Anketa
-AnketeService.svc
<%@ ServiceHost Language="C#" Debug="true" Service="AnketeService.AnketeService" %>
-Web.config
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<bindings>
<wsHttpBinding>
<binding name="NoSecurityPlusRM" openTimeout="00:10:00" sendTimeout="00:10:00">
<reliableSession enabled="true" />
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="Metadata" name="AnketeService.AnketeService">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="NoSecurityPlusRM"
contract="AnketeService.IAnketeService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Metadata">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="wsHttpBindingBehavior">
<callbackTimeouts transactionTimeout="23:59:59" />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
2) ПРОЕКТ AnketeService
-AnketeService.cs
[ServiceBehavior(Name="Ankete servis", InstanceContextMode=InstanceContextMode.PerCall , ConcurrencyMode=ConcurrencyMode.Single)]
public class AnketeService : IAnketeService
{
UsersItems allUsers = new UsersItems();
AnketaItems AnketaOfUserName = new AnketaItems();
public UsersItems getUsersNames()
{
return allUsers.ReturnData();
}
public AnketaItems getAnketeGledeUName(string userName)
{
return AnketaOfUserName.ReturnAnketeGledeUName(userName);
}
}
}
-IAnketeService.cs
[ServiceContract(Name = "AnketeService", Namespace = "http://MartinFri/Ankete/2011-2012")]
public interface IAnketeService
{
[OperationContract]
UsersItems getUsersNames();
[OperationContract]
AnketaItems getAnketeGledeUName(string userName);
}
3) AnketaTypes (не имеет значения, только классы типов)
РЕШЕНИЕ КЛИЕНТА (1 проект)
1) ПРОЕКТ AnketaClient
Здесь я делаю Добавить ссылку на службу -> localhost: 56507 / AnketeService.svc
-ClientConsumeWCF.cs
public partial class ClientConsumeWCF : System.Web.UI.Page
{
AnketeServiceClient client = new AnketeServiceClient("WSHttpBinding_AnketeService");
AnketaItems AItem = new AnketaItems();
protected void Page_Load(object sender, EventArgs e)
{
this.btnLoad.Click += new EventHandler(btnLoad_Click);
}
void btnLoad_Click(object sender, EventArgs e)
{
List<string> anketeList = new List<string>();
if (ddlUserji.SelectedItem != null)
{
AItem = client.getAnketeGledeUName(Convert.ToString(ddlUserji.SelectedItem));
List<AnketaItem> ankete = AItem.ListAnketaGledeUName;
GVAnkete.DataSource = ankete;
GVAnkete.DataBind();
}
AItem.UserFirstName = (Environment.MachineName).ToString();
TextBox1.Text = client.reciHello(AItem);
}
}
}
-Web.Config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_AnketeService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
<wsHttpBinding>
<binding name="WSHttpBinding_AnketeService" closeTimeout="00:10:00"
openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="true" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:56507/AnketeService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_AnketeService"
contract="AnketeServiceReference.AnketeService" name="WSHttpBinding_AnketeService" />
</client>
</system.serviceModel>
</configuration>
У кого-нибудь есть ссылка с хорошими инструкциями или хорошим учебником?Буду рад любому совету, как с этим справиться.
Спасибо, Мартин