Служба WCF вместе с LINQ to SQL в asp.net - PullRequest
3 голосов
/ 26 августа 2010

Я создал службу WCF в своем приложении, которая включает в себя понятия LINQ, но я не могу понять, как вызвать эту службу на моих веб-страницах. Кто-нибудь может мне сказать, как вызвать службу, которую я создал, к моему приложению с подробными инструкциями наряду с некоторыми примерами кодирования, чтобы я мог продолжить? Заранее спасибо.

1 Ответ

1 голос
/ 26 августа 2010

Вот пример, который я собрал, чтобы показать, как вызвать службу WCF RESTful, которая возвращает результат из LINQ с базовой веб-страницы с помощью функции $.ajax jQuery.Независимо от того, возвращаетесь ли вы из LINQ к объектам или из LINQ в SQL, базовая концепция должна быть одинаковой - я использую базовый LINQ-to-object только для иллюстрации сути.


Вот служба WCF ( Service2.svc.cs ):

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service2
{
    public static List<string> myValues = new List<string>()
    {
        "Apple", "Orange", "Apricot", "Banana", "Grape", "Peach", "Plum"
    };

    [OperationContract]
    [WebGet(UriTemplate="Filter?q={filter}", 
        ResponseFormat=WebMessageFormat.Json)]
    public IEnumerable<string> FilterList(string filter)
    {
        var items = from v in myValues
                    where v.StartsWith(filter)
                    select v;

        return items;
    }

Это простая служба, которая использует LINQ для возврата только тех элементов в моем List<string>, которые начинаются с буквытаким образом, если вы передадите 'P', вы получите "Peach" и "Plum", возвращенные как IEnumerable<string>.

Этот сервис настроен на возврат данных из запроса GET из-за использованияатрибута WebGet.Это указывает на то, что этот метод может быть вызван только через HTTP-запрос GET.Сервисный метод настроен на возврат данных в формате JSON (который более упорядочен по потоку, чем XML, но не так расширяем).Он настроен таким образом из-за настройки ResponseFormat=WebMessageFormat.Json для атрибута WebGet.

Когда я вызываю этот метод из своего приложения (или из браузера!) И передаю букву «P» для параметра фильтра, мой ответ клиенту такой (через Fiddler):["Peach","Plum"]

Это простой JSON-нотный массив, который возвращается.Затем я могу использовать эти возвращенные данные, чтобы сделать что угодно.

Также обратите внимание, что мне не нужно было преобразовывать IEnumberable<string> в формат JSON - встроенный сериализатор JSON WCF сделал это для меня.

РЕДАКТИРОВАТЬ: Вы можете заменить мой простой LINQ-to-objects на запрос LINQ-to-SQL, и он будет работать со всем остальным без изменений:

public IEnumerable<string> FilterList(string filter)
{
    DbTest1DataContext context = new DbTest1DataContext();
    var names = from n in context.Attendees
                where n.Name.StartsWith(filter)
                select n.Name;

    return names;
}

My DbTest1DataContext - это мой контекст LINQ-to-SQL, указывающий на базу данных, в которой есть таблица Attendees со столбцом Name.Все остальное в этом ответе остается неизменным (web.config, HTML, jQuery и т. Д.).


Вот мой web.config для службы ( web.config ):

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WcfRestService1.Service2AspNetAjaxBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="WcfRestService1.Service2">
        <endpoint address="" behaviorConfiguration="WcfRestService1.Service2AspNetAjaxBehavior"
          binding="webHttpBinding" contract="WcfRestService1.Service2" />
      </service>
    </services>
  </system.serviceModel>

Это довольно стандартная стандартная конфигурация, за исключением поведения конечной точки, которое я настроил на использование webHttp.


Вот мойкод клиента ( TestService.htm ):

<html>
    <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>    
    <script type="text/javascript">
        $(document).ready(function () {
            $("#sendit").click(function (e) {
                e.preventDefault();
                $.ajax({
                    url: "Service2.svc/Filter",
                    data: { q: $("#source").val() },
                    type: "GET",
                    dataType: "json",
                    success: function (data) {
                        var theResults = $("#results");
                        theResults.empty();
                        $.each(data, function (i, item) {
                            theResults.append("<li>" + item + "</li>");
                        });
                    },
                    error: function (x, t, m) { alert(t + " :: " + m); }
                });
            });
        });
    </script>
    </head>
    <body>
        <div>
            Starts with: <input id="source" type="text" />
            <button id="sendit">Send It</button>
        </div>
        <div>
            <ul id="results">
            </ul>
        </div>
    </body>
</html>

Это очень простая страница, которая берет ввод из текстового поля (id = source) и после нажатия на кнопку(id = sendit), он вызывает мою службу WCF RESTful.Я использую jQuery для этого, но вы можете видеть, что я передаю значение моего фильтра в свойстве data вызова $.ajax (data: { q: $("#source").val() }), я устанавливаю это как запрос GET (type: "GET"), потому что именно так я настроил сервис.Тип данных, который я ожидаю получить обратно, - JSON (dataType: "json").И если мой сервисный вызов успешен, я вызываю свой обработчик успеха, который затем просто добавляет возвращенные строки к элементу <ul>.

Надеюсь, это даст вам хорошую отправную точку для получения набора значений изЗапрос LINQ и отправка его веб-клиенту.Пожалуйста, дайте мне знать, если есть еще вопросы, и я обновлю свой ответ соответственно.

Надеюсь, это поможет!

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