Показаны сообщения с ярлыком Web. Показать все сообщения
Показаны сообщения с ярлыком Web. Показать все сообщения

Как найти свободный порт

пятница, 24 июля 2009 г.,

На codeproject случайно обнаружил способ выявления свободного порта:
public static int FindPort()
{
    IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
    using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
    {
        socket.Bind(endPoint);
        IPEndPoint local = (IPEndPoint)socket.LocalEndPoint;
        return local.Port;
    }
}
Другой способ здесь.

Веб-проигрыватель

вторник, 28 апреля 2009 г.,

Например, при загрузке веб-страницы в браузер надо начать проигрывание .mp3-файла. Сделать это можно с помощью Silverlight:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
    <script type='text/xaml' id="Ag">
        <?xml version='1.0' encoding='utf-8' ?>
        <MediaElement
            xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
            xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
            x:Name='media' Source='http://ipv4.fiddler:4139/Song.mp3' />
    </script>
</head>
<body>
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" style="height: 0px; width: 0px;">
        <param name="source" value="#Ag" />
    </object>
</body>
</html>
На странице есть вызов Silverlight, которому передается xaml, записанный в тег script.
Silverlight поддерживает Streaming и множество форматов, а также Server-Side Playlists.
Про адрес ipv4.fiddler - здесь.

Подключение сервиса к работающему сайту

пятница, 24 апреля 2009 г.,

Предположим, что есть ASP.NET сайт, созданный в Visual Studio 2008:
1) Ctrl+Shift+N
2) Project Types: Web, Templates: ASP.NET Web Application
3) F5 - в результате откроется IE, в котором отобразится default.aspx

Например, необходимо к работающему сайту подключить сервис с методом GetTicks, который доступен по адресу /DataProvider.svc/Now и возращает значение DateTime.Now.Ticks в xml-формате.

Чтобы создать сервис в Visual Studio надо:
1) создать новый проект Project Types: Windows, Templates: Class Library
2) в References добавить сборки: System.ServiceModel и System.ServiceModel.Web
3) в проект добавить следующий код:
using System;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace Providers
{
    [ServiceContract]
    public class DataProvider
    {
        [OperationContract]
        [WebGet(UriTemplate = "/Now/", ResponseFormat = WebMessageFormat.Xml)]
        public long GetTicks()
        {
            return DateTime.Now.Ticks;
        }
    }
}
4) Shift+F6 - в результате проект будет откомпилирован и в папке \Debug\bin появится файл Service.dll

Чтобы подключить сервис к сайту надо:
1) в папке с сайтом создать текстовый файл DataProvider.svc со следующим кодом:
<%@ ServiceHost

Service="Providers.DataProvider" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
2) файл Service.dll скопировать в папку \bin 3) в файл default.aspx в тег body добавить:
<a href="DataProvider.svc/Now">Now</a>
4) обновить открытое окно IE; в результате на странице появится ссылка Now; переход по этой ссылке приводит к вызову метода GetTicks и в IE отобразится, например:
<long xmlns="http://schemas.microsoft.com/2003/10/Serialization/">633761956465306263</long>

Примечание: если сервис был откомпилирован в режиме (Configuration: Debug), затем подключен к сайту и хоть раз вызван, то в момент повторной компиляции получим сообщение: Unexpected error creating debug information file '....PDB' -- '....pdb: The process cannot access the file because it is being used by another process.'
Решение: в проекте сайта открыть файл web.config и сохранить его; в результате сайт будет перезапущен; доступ к .pdb-файл будет открыт.

Как найти свободный порт

вторник, 21 апреля 2009 г.,

Для работы REST-сервисов требуется базовый адрес(а), например, http://localhost:8888, но бывает, что порт 8888 занят. В таком случае надо найти свободный порт. Сделать это можно следующим методом:

public static int FindFreePort()
{
    // если порт занят, то его нельзя использовать с другим адресом.

    var listerner = from ip in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()
            select ip.Port;
    var active = from ip in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()
            select ip.LocalEndPoint.Port;
    List<int> ports = new List<int>(listerner.Union(active).Distinct());
    for (int port = 1024; port < 65535; port++)
    {
        if (ports.Contains(port) == false)
            return port;
    }
    return -1;
}


Привилегированные (или зарезервированными) порты: 0 - 1023.
Зарегистрированные порты: 1024 – 49151.
Динамические порты: 49152 – 65535.

Как встроить Word в WinForms или веб-страницу

понедельник, 13 апреля 2009 г.,

Word, Excel, Visio, PowerPoint можно встроить в Windows Forms Application или веб-страницу с помощью DSOFramer (это ActiveX), который входит в состав Microsoft Developer Support Office Framer Control 1.3 Sample (KB 311765).

После установки примеров (C:\DsoFramer) надо: 1) в Visual Studio создать новый проект (Windows Forms Application); 2) В References добавить ссылку на C:\DsoFramer\dsoframer.ocx (в результате будет создан файл Interop.DSOFramer.dll; в References появится DSOFramer); 3) Добавить в проект класс:
public class Fcc : AxHost
{
    public Fcc()
        : base("00460182-9E5E-11d5-B7C8-B8269041DD57")
    {
    }
}
4) Код конструктора Form1 заменить на следующий:
this.Size = new Size((int)(SystemInformation.WorkingArea.Width * .90f), 400);
this.Shown += delegate
{
    var fcc = new Fcc();
    fcc.Dock = DockStyle.Fill;
    fcc.Parent = this;

    var ocx = fcc.GetOcx() as FramerControl;
    ocx.Titlebar = false;
    ocx.Toolbars = false;
    ocx.Menubar = false;
    ocx.EventsEnabled = true;

    ocx.Open(@"C:\Temp\Test.docx", Missing.Value, Missing.Value, Missing.Value, Missing.Value);
    ocx.Activate();
};
Метод ocx.Open также можно вызвать следующим способом:
typeof(_FramerControl).GetMethod("Open").Invoke(ocx, new object[] { @"C:\Temp\Test.docx", Missing.Value, Missing.Value, Missing.Value, Missing.Value });
5) Заменить "C:\Temp\Test.docx" на путь к файлу с расширением: .docx | .doc | .pptx | ... Нажать F5.


Чтобы самому не создавать наследника AxHost, можно сделать следующее: 1) Открыть Form1.cs в дизайнере (= в контекстном меню выбрать View Designer); 2) Открыть Toolbox (Ctrl+W, X); 3) В контекстном меню Toolbox'а выбрать Choose Items... - COM Components; 4) В списке найти DSO Framer Control Object, включить checkbox; 5) DSO Framer Control Object перетащить с Toolbar'а и сбросить над формой.
В результате будет создан файл AxInterop.DSOFramer.dll, а в References появится AxDSOFramer.

Пример встраивания офисных документов в веб-страницу находится в папке C:\DsoFramer\Samples\WebTest

Подробности использования DSOFramer приведены в статье "Visual C++ ActiveX Control for hosting Office documents in Visual Basic or HTML".

Вызов REST сервиса с веб-страницы

среда, 11 марта 2009 г.,

Например, REST-служба доступна по адресу http://localhost:1799/Test2.svc и в ней определен WebGet-метод GetData, который принимает какое-то значение.
Чтобы вызвать GetData c web-страницы пишем следующее:


1
<button onclick="alert(GetREST('http://localhost:1799/Test2.svc/GetData/2'))">REST</button>

...


1
<script language="jscript">

2
function GetREST(uri)

3
{

4
var x = new XMLHttpRequest();

5
x.open("GET", uri, false, null, null);

6
x.send();

7
return x.responseText;

8
}

9
</script>


Очевидно, что работать с REST намного проще, чем с SOAP.