3

背景:我有一个用 VB.NET 编写的 winform 应用程序,它使用 WebService 根据他们选择的营销公司向用户发送不同的邀请以进行不同的采访。winform 应用程序从各种文本框、列表框和下拉列表中提取字符串值,以创建一些 XML 并将其推送到名为 AcompServiceClient 的 Web 服务

问题:

  • 是否有向导或第 3 方应用程序可以将 winform 数据导出到 webform asp.net,或者我应该从头开始构建一个 aspx 页面,其中所有控件的命名空间与 winform 应用程序相同?
  • 除了 AcompServiceClient Web 服务和代码隐藏 vb 之外,我还需要传输或设置哪些文件才能完成这项工作?(查看项目文件的屏幕截图)
  • 我是否必须复制 app.config 文件的任何部分并将其调整为 web.config 文件?

我刚在想:

  • 我可以首先将 Acomp_Invitation_Form.vb 复制到页面后面的 AComp_Invitation_Web_App.aspx.vb 代码。
  • 从网络服务器中添加现有的网络服务
  • 在前端aspx页面使用相同的名称/id手动重新添加格式、文本框、列表框和下拉列表

这是 WinForm 应用程序的屏幕截图:

ACOMP 截图

这是项目文件的屏幕截图:

在此处输入图像描述

这是我在 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
4

3 回答 3

4

要非常小心简单的方法。虽然 ASP.NET Web 窗体可能看起来类似于 Windows 窗体(连接到事件的控件),但其底层机制却大不相同。如果您还没有这样做,我建议您阅读 HTTP 的工作原理和 ASP.NET 页面的生命周期。

于 2011-04-08T15:44:23.433 回答
2

是的,你想要的方式就是我多次这样做的方式。

只需从后面的代码中复制方法并将它们粘贴到您的 asp.net 页面后面的代码中。您的某些方法不兼容,因为它们在 asp.net 中不受支持,但是当您构建项目时,您会发现我们真的很快。

使用与 winform 中的控件名称完全相同的控件创建您的网页。构建时,您所要做的就是修复错误,然后您就可以开始了。

看起来您已连接到某些服务,因此您当然需要参考它。

于 2011-04-08T15:26:46.167 回答
1

是的,这是一般的想法。我会特别注意与AcompServiceClient在无状态 Web 环境中使用相关的任何问题。很难说你是否必须重新考虑你是如何使用它而不知道它是什么、它是如何工作的或它是如何被消耗的。

看起来您所做的任何其他事情都依赖于在有状态的环境中运行。您只是从各种文本框中提取字符串值来创建一些 XML 并将其推送到服务。所有这些都应该顺利完成。您可能想考虑添加一些客户端验证规则,但除此之外它看起来很简单。

您需要更改填充 DropDownList 的方式。win 和 web 表单之间的工作方式略有不同。它希望绑定到 web 表单中的数据源。

于 2011-04-08T15:26:19.020 回答