Как запустить услугу wcf по требованию клиента? - PullRequest
0 голосов
/ 28 февраля 2012

, пожалуйста, дайте мне несколько советов.

Я искал сотни ее вопросов на форуме, но я не смог добиться того, чего хочу.У меня есть веб-приложение с файлом .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>

У кого-нибудь есть ссылка с хорошими инструкциями или хорошим учебником?Буду рад любому совету, как с этим справиться.

Спасибо, Мартин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...