Могу ли я обслуживать веб-страницы из службы WCF, НЕ размещенной в IIS? - PullRequest
3 голосов
/ 07 мая 2011

У меня есть служба WCF, которая будет использоваться как стандартная веб-служба, но я также хочу предоставить интерфейс конфигурации для различных параметров службы. Можно ли обслуживать стандартные HTML-страницы, когда служба не размещается в IIS? Если да, то какие есть "ошибки"?

Ответы [ 5 ]

6 голосов
/ 07 мая 2011

WCF - это API, используемый для создания сервисов. Обработка «веб-страниц конфигурации» выходит за рамки этого API. Если вы действительно хотите сделать что-то подобное, это означает, что вы должны создать другой сервис REST (webHttp), который будет предоставлять операции, обслуживающие ваши веб-страницы, и принимать HTTP POST с ваших веб-страниц. Это возможно, но много работы, потому что текущая версия WCF не любит тип содержимого форм POSTed HTML (application / x-www-form-urlencoded и multipart / form-data). Таким же образом вы можете реализовать свой собственный "веб-сервер", используя HttpListener .

5 голосов
/ 11 августа 2013

Да, вы можете. Именно так обслуживаются страницы справки WSDL при добавлении поведения HTTP Help в вашу службу.

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "test")]
    Stream GetPage();
}

[ServiceBehavior]
public class TestService : ITestService
{
    public Stream GetPage()
    {
        var pageStream = new FileStream(Path.Combine(Environment.CurrentDirectory, "test.htm"), FileMode.Open, FileAccess.Read, FileShare.Read);
        var context = WebOperationContext.Current;

        if (context != null)
        {
            context.OutgoingResponse.ContentType = "text/html";
        }

        return pageStream;
    }
}

Вы также можете встроить страницу в поток памяти. Кроме того, в WCF 4.5+ предусмотрен тип HttpResponseMessage для обслуживания html-страниц. Надеюсь, это поможет!

1 голос
/ 07 мая 2011

Преимущества самостоятельного размещения вместо IIS, как правило, заключаются в потере возможностей инструментовки / утилизации / восстановления в пулах приложений IIS.Тем не менее, самостоятельно размещенные, как правило, работают значительно лучше.

0 голосов
/ 11 августа 2018

Это самая верхняя ссылка при поиске "wcf-страницы с собственным хостингом", поэтому я хотел бы добавить более полный ответ.Ответ @ Jared-G был близок, но я хотел разместить приложение Angular в качестве внешнего интерфейса для моей службы WCF.Это означало возможность обслуживать произвольные файлы js / css / img.Расширение предыдущего ответа:

[ServiceContract]
public interface ITestService
{
    // Webpage hosted at {Service URL}/Client
    [OperationContract]
    [WebGet(UriTemplate = "Client/{*uri}")]
    Stream GetPage();
}

[ServiceBehavior]
public class TestService : ITestService
{
    public Stream GetPage(string uri)
    {
        if (uri == "") uri = "test.htm"; // Default page, if root path specified
        var basePagePath = "Client\\"; // Default path for webpage, relative to executable directory.
        var pageStream = new FileStream(Path.Combine(Environment.CurrentDirectory, basePagePath, uri), FileMode.Open, FileAccess.Read, FileShare.Read);

        var context = WebOperationContext.Current;

        if (context != null)
        {
            context.OutgoingResponse.ContentType = "text/html";
        }

        return pageStream;
    }
}
0 голосов
/ 07 мая 2011

Да, это возможно.Вы можете разместить службу WCF в приложении .NET или службу Windows на порту HTTP или TCP.

Затем вам придется разместить свой сайт на другом веб-сервере и создать ссылку на свою службу WCF вваше веб-приложение.

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