ASP.NET MVC для связи Silverlight - PullRequest
       3

ASP.NET MVC для связи Silverlight

1 голос
/ 22 февраля 2012

Итак, у меня есть веб-приложение ASP.NET MVC, в которое встроено приложение silverlight, и я бы хотел, чтобы клиент SL связывался с базой данных через службу WCF с поддержкой SL, которая работает внутри ASP.NET MVC приложение. Мне не повезло в том, чтобы заставить это работать, приложение silverlight получает сервисную ссылку на сервис WCF просто отлично. Когда я запускаю клиент silverlight и вызываю веб-сервис, он каждый раз возвращает исключение NOT FOUND. Через отладку я вижу, что служба WCF вызывается, но silverlight выдает ошибку и ничего не возвращается.

Я попытался включить

serviceDebug includeExceptionDetailInFaults = "true"

Но я все еще получаю исключение НЕ НАЙДЕНО. Есть мысли?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

Мне удалось выяснить это - объекты, которые я использовал в качестве контрактов данных, не были помечены как таковые, и хотя они были «приняты» приложением silverlight и были сгенерированы ссылкой на службу, они всегда будут проходить через это принятие после служба WCF вернулась.

0 голосов
/ 24 февраля 2012

Первый трюк состоял бы в том, чтобы заставить ваш серебряный свет правильно общаться с вашим WCF. НЕ НАЙДЕНО происходит по МНОГИМ сценариям. Возможно, ваша веб-служба не работает в IIS, возможно, вы пытаетесь установить связь с помощью какого-либо объекта, который нарушает договор на обслуживание. Например. Ваш объект имеет свойство типа «объект», которое может быть любым. Первым шагом к сужению этого процесса будет установка Fiddler2 для отображения сетевого трафика между вашим клиентом и вашим сервером.

Как только это будет сделано, т. Е. Если вы уверены, что ваше приложение silverlight может обмениваться данными с веб-сервером, вы можете использовать метод связи между вашим asp.net и приложением silverlight. Теперь имейте в виду, что Silverlight запускается на клиенте, а asp.net запускается на сервере, поэтому обмен данными между кодом и aspx за страницей с объектом silverlight light должен происходить через какой-то тип общего прокси-сервера - этот прокси-сервер является JavaScript. Определите метод javascript, который будет обращаться к мосту к контейнеру silverlight / object и передавать метод. И наоборот, определите метод, который позволил бы серебряному свету общаться с javascript.

Например, допустим, у вас есть список категорий, который отображается в серебряном свете на вашей странице aspx / html. Скорее всего, этот список категорий существует в файле XAP в вашей папке ClientBin для вашего проекта asp.net.
Пример:

<div style="margin:auto; float:left; height:auto;">
    <div id="silverlightControlHost_Categoris" style="height:auto;">

        <object id="silverlightControl_Categories" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" style="height:100%">
        <param name="source" value="ClientBin/Categories.xap"/>
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="4.0.50826.0" />
        <param name="autoUpgrade" value="true" />
        <param name="ScaleMode" value="Stretch" />
        <param name="EnableAutoZoom" value="True" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
            <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
        </a>
    </object><iframe id="Iframe2" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
    </div>
</div>

Далее в загруженном событии для вашего проекта Silverlight зарегистрируйте объект как сценарий:

using System.Windows.Browser;

namespace CategoryListing
{
[ScriptableType]
public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        categoryListing1.DataContext = new MyLibrary.ViewModel.TCategoryListingViewModel();
        //categoryListing1 is the name of the control whose data context is the view model
        HtmlPage.RegisterScriptableObject("categoriesBridge", (categoryListing1.DataContext as MyLibrary.ViewModel.TCategoryListingViewModel));
    }

}

}

Определите метод javascript для общения с каким-либо методом в модели представления списка категорий

function selectCategory(category_id) {
var plugin = document.getElementById("silverlightControl_Categories");
//note the reference to the categoriesBridge property that was registered as scriptable
if (plugin != null)
    plugin.content.categoriesBridge.SelectCategory(category_id);

}

Определение метода выбора категории:

[ScriptableMember]
    public void SelectCategory(string category_id)
    {
        //select the category here
    }

Если вы хотите вызвать этот метод из ДРУГОГО объекта silverlight на странице:

try
                {
                    HtmlWindow window = HtmlPage.Window;
                    window.Invoke("SelectCategory", new object[] { "Category1" });
                }
                catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); }

В конце концов, вы должны иметь возможность использовать разметку html / aspx на своей странице для вызова метода javascript для вызова объекта silverlight.

Наслаждайтесь.

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