VB.NET - самый простой способ экспортировать / конвертировать приложение WinForm в приложение Web ASP.NET - PullRequest
2 голосов
/ 08 апреля 2011

Справочная информация. У меня есть приложение winform, написанное на VB.NET, которое использует WebService для рассылки различных приглашений пользователям в зависимости от маркетинговой компании, которую они выбирают для проведения различных собеседований.Приложение winform извлекает строковые значения из различных текстовых полей, списков и выпадающих списков, чтобы создать некоторый XML и отправить его в веб-службу с именем AcompServiceClient

Вопросы:

  • Есть лимастер или стороннее приложение, которое будет экспортировать данные winform в webform asp.net или мне нужно создать страницу aspx с нуля с теми же пространствами имен для всех элементов управления, что и в приложении winform?
  • Какие файлы мне нужно перенести или настроить, чтобы это работало, кроме веб-службы AcompServiceClient и vb с выделенным кодом?(посмотрите на скриншот файлов проекта)
  • Нужно ли мне копировать какие-либо части файла app.config и адаптировать его к файлу web.config?

Я былподумав:

  • Я могу начать с копирования Acomp_Invitation_Form.vb в код AComp_Invitation_Web_App.aspx.vb позади страницы.
  • Добавление существующего веб-сервиса из веб-сервера
  • Вручную повторно добавить форматирование, текстовые поля, списки и раскрывающиеся списки на странице aspx внешнего интерфейса, используя те же имена / идентификаторы

Вот скриншот приложения WinForm:

ACOMP Screenshot

Вот скриншот файлов проекта:

enter image description here

Вот мой код на Acomp_Invitation_Form.vb:

Imports TestClient.aCompService
Imports System.Text
Public Class Form1

Private proxy As New AcompServiceClient
Private Sub stuff()

    Dim splitContractingBundle() As String
    splitContractingBundle = Split(cb2.SelectedItem, "|")
    Dim splitMarketingCompany() As String
    splitMarketingCompany = Split(cb3.SelectedItem, "|")
    Dim strDate As String = System.DateTime.Now.ToString
    Dim strOpData As String = String.Format("{0}~{1}~{2}~{3}~{4}~{5}~{6}~{7}~{8}~{9}~{10}",
                                            Trim(splitMarketingCompany(0)), txtFirstName.Text, "", txtLastName.Text,
                                            txtEmail.Text, txtEmail.Text, "1", strDate,
                                            "Pending", "1/1/1900", Trim(splitContractingBundle(0)))

    Dim int1 As Boolean = proxy.AddContractOpportunity(strOpData, "test", "test")
    txtEmail.Text = ""
    txtFirstName.Text = ""
    txtLastName.Text = ""
    lbCarriers.Items.Clear()
    cb2.Items.Clear()
    cb3.Items.Clear()
    cb2.SelectedItem = ""
    cb3.SelectedText = ""
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    'TODO Add code to validate that all selections that are reaquired are met.
    'ccemail and the additional message are not required
    Dim firstname As String = txtFirstName.Text
    Dim lastname As String = txtLastName.Text
    Dim ccEmail As String = txtccEmail.Text
    Dim sb As New StringBuilder
    sb.AppendLine("<?xml version=""1.0"" encoding=""utf-8""?>")
    sb.AppendLine("<root>")
    sb.AppendLine("<MarketingCompany>")
    sb.AppendLine("<MarketingCompanyName>")
    ''Get Marketing Company Short Name
    Dim splitMC As String() = Split(cb3.SelectedItem, "|")
    Dim MCShort As String = Trim(splitMC(0))
    sb.AppendLine(String.Format("<MCNAme>{0}</MCNAme>", MCShort))
    'sb.AppendLine(String.Format("<MCNAme>{0}</MCNAme>", My.Settings.MarketingCompanyShortName))
    sb.AppendLine(String.Format("<ccEmail>{0}</ccEmail>", txtccEmail.Text))
    sb.AppendLine(String.Format("<emailMessage>{0}</emailMessage>", txtMessage.Text))
    sb.AppendLine(String.Format("<MarketerName>{0}</MarketerName>", txtMarketerName.Text))
    sb.AppendLine("<agent>")
    sb.AppendLine(String.Format("<FirstName>{0}</FirstName>", txtFirstName.Text))
    sb.AppendLine(String.Format("<LastName>{0}</LastName>", txtLastName.Text))
    sb.AppendLine(String.Format("<Email>{0}</Email>", txtEmail.Text))
    sb.AppendLine("<CRMGuid>123456</CRMGuid>")
    Dim spltBundles() As String

    For Each item In cb2.SelectedItems
        If Trim(item) <> "" Then
            spltBundles = Split(item, "|")
            sb.AppendLine("<ContractingOpportunity>")
            sb.AppendLine(String.Format("<Carrier>{0}</Carrier>", Trim(spltBundles(0))))
            sb.AppendLine(String.Format("<ContractingOpportunityName>{0}</ContractingOpportunityName>", Trim(spltBundles(1))))
            sb.AppendLine("</ContractingOpportunity>")
        End If
    Next
    sb.AppendLine("</agent>")
    sb.AppendLine("</MarketingCompanyName>")
    sb.AppendLine(" </MarketingCompany>")
    sb.AppendLine(" </root>")
    Dim xmlStr = sb.ToString
    Dim int1 As Boolean = proxy.AddContractOpportunity(xmlStr.ToString, "test", "test")
    MsgBox("Made It")
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    GetCarriers()
    GetMarketingCompanies()
End Sub

Private Sub GetCarriers()
    Try
        Dim ac1 As Array
        ac1 = proxy.GetCarrierNames("test", "test")

        For Each item In ac1
            lbCarriers.Items.Add(String.Format("{0} | {1} | {2}", item.CarrierID, item.CarrierNameLong, item.CarrierNameShort))

        Next
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub
Private Sub GetMarketingCompanies()
    Try
        Dim ac1 As Array
        ac1 = proxy.GetMarketingCompanyNames("test", "test")

        For Each item In ac1
            cb3.Items.Add(String.Format("{0}   |   {1}", item.MarketingCompanyShort, item.MarketingCompanyName))
        Next
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub lbCarriers_LostFocus(sender As Object, e As System.EventArgs) Handles lbCarriers.LostFocus
    Dim splt() As String
    Dim ac1 As Array
    cb2.Items.Clear()

    For Each item In lbCarriers.SelectedItems
        splt = Split(item, "|")
        ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0)))
        For Each Pitem In ac1
            cb2.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName)
        Next
    Next
End Sub
End Class

Ответы [ 3 ]

4 голосов
/ 08 апреля 2011

Будьте очень осторожны с легким путем. Хотя веб-формы ASP.NET могут выглядеть похожими на Windows Forms (элементы управления, подключенные к событиям), базовый механизм очень сильно отличается. Если вы этого еще не сделали, я рекомендую вам ознакомиться с принципами работы HTTP и жизненным циклом страницы ASP.NET.

2 голосов
/ 08 апреля 2011

Да, вы хотите сделать это так, как я делал это много раз.

Просто скопируйте методы из вашего кода и вставьте их в код позади вашей страницы asp.net.Некоторые из ваших методов не совместимы, потому что они не поддерживаются в asp.net, но вы обнаружите, что это очень быстро, когда вы создаете проект.

Создайте свою веб-страницу с элементами управления, точно такими же именами, что и в winform.Когда вы строите, все, что вам нужно сделать, это исправить ошибки, и вы уже в пути.

Похоже, вы подключены к какой-то службе, поэтому, конечно, вам нужно будет сослаться на это.

1 голос
/ 08 апреля 2011

Да, это общая идея. Я бы уделил особое внимание любым проблемам, связанным с использованием AcompServiceClient в веб-среде без состояния. Трудно сказать, нужно ли вам переосмыслить, как вы это используете или нет, ничего не зная о том, что это такое, как оно работает или как оно потребляется.

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

Вы захотите изменить способ заполнения списка DropDownList. Они работают немного иначе между win и web формами. Он хочет быть привязанным к источнику данных в веб-формах.

...